win下visual studio 2010编译CURL和libcurl

    要想在WIN下编译CURL和libcurl,真是件麻烦事。要编译curl,就得先编译openssl和zlib,因为curl依赖这两个库。分别到其官方网站下载三个软件的源代码
http://curl.haxx.se/download.html下载 curl-7.25.0
http://www.zlib.net/ 下载 zlib-1.2.7
http://www.openssl.org/source/ 下载 openSSL最新版2.1.0j,以上皆为最新版。本机环境WIN7,VS2010,把这三个软件解压到H:\TDDOWNLOAD\lib目录下。
开始干活。

1.编译ZLIB


curl依赖openssl和zlib,而openssl又依赖zlib,所以得先编译zlib
(1)由于zlib部分模块为了追求速度,使用了汇编来编写,所以在编译ZLIB之前,还需要先编译两个汇编程序,先来编译masmx86模块。
(2)从visual studio-工具-visual studio命令提示下进入命令行,VS自动设置命令行环境。进入contrib/masmx86目录下,执行bld_ml32.bat,调用汇编器编译汇编代码。在H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\masmx86下应该生成了几个obj文件.
(3)打开contrib\vstudio\vc10\zlibvc.sln文件,选择zlibstat模块,添加一个缺少的文件zlib-1.2.7\contrib\minizip\iowin32.c,解决方案配置选择release,当然也可以选择debug版本,但是编译后的体积会略大一些(附带了debug信息),编译此方案。
2012-05-13_042555.png
(4)复制H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\vstudio\vc10\x86\ZlibStatRelease\zlibstat.lib文件到H:\TDDOWNLOAD\lib\zlib\lib文件夹,同时在H:\TDDOWNLOAD\lib\zlib文件夹下新建include目录,复制H:\TDDOWNLOAD\lib\zlib-1.2.7和H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\minizip下的头文件到此目录。
     到这里,ZLIB编译完毕。

2.编译openssl

阅读剩余部分...

socket与curl(2)

socket与curl(2)
例九:以第六章的例子,用socket完成同样的功能(原题目参见第六章)
(1)来到目的地http://typecho.org/archives/54,真实提交一次,用fiddler抓包,查看抓到的数据,如下图所示:
socket_example_fiddler.JPG
好了,果断写代码:
<?php
$post_ =array ('author' => '一直都在','mail'=>'wait@qq.com','url'=>'','text'=>'测试');
$data=http_build_query($post_);
$fp = fsockopen("typecho.org", 80, $errno, $errstr,5);
$out="POST http://typecho.org/archives/54/comment HTTP/1.1\r\n";
$out.="Host: typecho.org\r\n";
$out.="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"."\r\n";
$out.="Content-type: application/x-www-form-urlencoded\r\n";
$out.="Referer: http://typecho.org/archives/54/\r\n";
$out.="PHPSESSID=082b0cc33cc7e6df1f87502c456c3eb0\r\n";
$out.="Content-Length: " . strlen($data) . "\r\n";
$out.="Connection: close\r\n\r\n";
$out.=$data."\r\n\r\n";
fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 1280);
    }
fclose($fp);
不用看了,闭着眼睛都知道答案一定是正确的。因为web应用程序是无法区分机器和人的。不论是人还是机器,都是通过socket来提交数据的。只不过人是通过浏览器来调用操作系统的socket来提交,而机器人是通过自己写代码来调用socket来提交。
注意以下几点:
(1)fsockopen的第一个参数即$hostname不要带上http://这样的字符串,除非你使用SSL等。
(2)Headers请求不一定都要照着抓包里的数据全部带上,除非你调试不成功或者不熟练或者有特殊需求,可以全部照搬。否则只要把核心的几个header带上就可以了。
(3)在Connection和data后有两个换行,我们看一下截图就知道了。
(4)注意,有些表单请求可能有hidden值,务必仔细抓包。
(5)注意编码问题。
也没啥说的了,更多的就靠你自己揣摩了。我上面不是还说了么,“建议使用stream_socket来实现”。很简单,只要改一行代码就行,如下:
$fp = stream_socket_client("tcp://typecho.org:80", $errno, $errstr, 3);
运行结果就不截图了。

socket与curl(1)

    Socket是什么?能干什么?长什么样?大致的原理是什么?我想还是给出实例来最好理解。
在这里,我还是用java来实现一个socket的服务端与客户端(你也可以用任何其他支持socket操作的语言来实现),然后用php来做为客户端请求该套接字。如下图所示,在服务器端使用socket开了一个服务,端口是8001,那么我就可以建立多个客户端来进行连接。在客户端,我向该socket发送一条消息,服务器端在收到了我的消息后,会根据情况进行一定的处理,返回给客户端,同时在服务器端打印所有收到的消息。
s1.jpg
    

阅读剩余部分...

基于PHP的cURL快速入门[转]

cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它。

为什么要用 cURL?

是的,我们可以通过其他办法获取网页内容。大多数时候,我因为想偷懒,都直接用简单的PHP函数:


$content=file_get_contents("http://www.nettuts.com");
// or
$lines=file("http://www.nettuts.com");
// or
readfile(http://www.nettuts.com);
?>

不过,这种做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等。


cURL 是一种功能强大的库,支持很多不同的协议、选项,能提供 URL 请求相关的各种细节信息。


基本结构

在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤:


  • 初始化
  • 设置变量
  • 执行并获取结果
  • 释放cURL句柄

// 1. 初始化
$ch=curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,"http://www.nettuts.com");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,0);
// 3. 执行并获取HTML文档内容
$output=curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);

第二步(也就是 curl_setopt() )最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。

阅读剩余部分...

    Page :
  1. 1