Curl 从远程服务器复制数据--出现问题

Curl 从远程服务器复制数据--出现问题,curl,copy,Curl,Copy,我想从远程服务器复制文件,但远程主机似乎正在使用会话,需要cookie 我用了这个方法 定义变量后 $url="http://example.org/exmple.mp3"; $nn = "\r\n"; $cookies=""; $request = GET . " " . str_replace ( " ", "%20", $url ) . " HTTP/1.1" . $nn . "Host: " . $host . $nn . "User-Agent: Mozilla/5.0 (Window

我想从远程服务器复制文件,但远程主机似乎正在使用会话,需要cookie

我用了这个方法 定义变量后

$url="http://example.org/exmple.mp3";
$nn = "\r\n";
$cookies="";
$request = GET . " " . str_replace ( " ", "%20", $url ) . " HTTP/1.1" . $nn . "Host: " . $host . $nn . "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" . $nn . "Accept: */*" . $nn . "Accept-Language: en-us;q=0.7,en;q=0.3" . $nn . "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" . $nn . "Pragma: no-cache" . $nn . "Cache-Control: no-chache" . $nn  . $proxyauthorization . $referer . $cookies . "Connection: Close";

$fp= socksopen($Proxy,$port, $errno, $errstr, 15 );

socket_set_timeout ( $fp, 120 );

fputs ( $fp, $request );

fflush ( $fp );

//read header

$i = 1;

do {

$header.= @fgets ( $fp, 128 );

$i++;

} while ( strpos ( $header, $nn . $nn ) === false );

echo $header;

fclose ($fp);
现在我有了带有cookies的标题,url上说:

HTTP/1.1 302 Moved Temporarily Content-length: 0 Content-type: text/html Server: Sun-ONE-Web-Server/6.1 Date: Mon, 28 Dec 2009 13:40:53 GMT Set-cookie: ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==;path=/;domain=.example.org Set-cookie: WLSESSION=1528980108.20480.0000; expires=Tue, 29-Dec-2009 13:40:52 GMT; path=/ Location: http://example.org/exmple.mp3&tag=1 Via: 1.1 proxy-server1 Proxy-agent: Sun-Java-System-Web-Proxy-Server/4.
然后我做了一些代码,并在代码中构建了这个:

$cookies="ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==, WLSESSION=1528980108.20480.0000";
使用上述相同的方法重新请求url 我又一次用另一块饼干得到了同样的标题

很明显,远程网站每次都将我视为第一次访问,并设置了新的cookie增益


怎么了?

手工编写HTTP请求似乎有很多麻烦。为什么不在PHP中使用像cURL这样开箱即用的东西呢。

首先,祝贺你尝试自己动手做这件事,而不是使用像cURL这样预先打包的东西。“真正的程序员”经常这样做,即使效率或可靠性较低,因为它增加了我们对所使用和构建的系统的理解

现在,我们来谈谈手头的问题


您没有正确地将cookie传输到服务器。代码只发送cookie值本身,而不是需要发送的“cookie”头。发送带有请求的cookie的正确方法是
cookie:name=value
,如
cookie:ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==,WLSESSION=1528980108.20480.0000
有一件事,我正试图复制的文件是一个.pdf文件

我通过浏览器检查,结果如下:

假设URL为:

http://example.com/stamp/stamp.jsp?tp=&arnumber=5344171&isnumber=5344169

我检查了URL的源代码,它包含到另一个页面的重定向,该页面要么是带有iframe的javascript

页面来源(从我的浏览器)


正如我单击URL时看到的,它将我重定向到URL2 URL2是这样的:
http://example.com/stampPDF/getPDF.jsp?tp=&arnumber=5255176&isnumber=5255174

URL2包含.pdf文件,我可以轻松复制(下载)

但是当我使用上面提到的代码时,
$url=”http://example.com/stamp/stamp.jsp?tp=&arnumber=5255176&isnumber=5255174“
它需要cookies来设置我的请求,当接收cookies和设置并发送cookies与我的请求时,它会再次回复一个新cookie


伙计们,怎么了?

谢谢,我似乎不得不忘记我的全部代码,转而使用cURL:(:(谢谢:),我想知道我在做什么,当使用cURL时,我是瞎的……。所以我说的和u之间的区别是一个空格,我包括了一个空格我:…n7zMA==,WLSESSION=1528…你的:n7zMA==,WLSESSION=1528是问题吗?相同的结果:标题说:HTTP/1.1 302临时移动内容长度:0内容类型:text/html服务器:Sun ONE-Web-Server/6.1日期:2010年1月1日星期五03:30:17 GMT Set cookie:ERIGHTS=x2bfyix2bvvoddwm9hredxh2pyux2ff3bsmqq9-hhBHcMigRXArbhL4YBG81w==;path=/;domain=.example.org Set cookie:WLSESSION=1562534540.20480.0000;expires=Sat,2010年1月2日03:30:18 GMT;path=/Location:服务器用新cookie发送相同的头最初的代码和我的代码是,您的$cookies开头没有“Cookie:”。这意味着cookies没有被识别为cookies。单个标题中多个cookies之间的空格是可选的。好吧,仍然有问题,请参阅我的另一个说明,
     <frameset rows="65,35%">
<frame src="http://example.com/stamp/banner.jsp" frameborder="0" framespacing="0" framepadding="0" scrolling="no" />
<frame src="http://example.com/stampPDF/getPDF.jsp?tp=&arnumber=5255176&isnumber=5255174" frameborder="0" />