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

时间:2010-01-01 01:18:45

标签: 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 (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);

现在我的网址是带有网址的网址:

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.
然后我做了一些sting代码并在代码中构建了它:

$cookies="ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==, WLSESSION=1528980108.20480.0000";

使用上述相同方法重新请求网址 再次,我有另一个饼干相同的标题

它确定远程网站每次都将我视为首次访问者并设置新的cookie获取

出了什么问题?

3 个答案:

答案 0 :(得分:1)

手工编写HTTP请求似乎很麻烦。为什么不在PHP中使用类似cURL的东西supports cookies开箱即用。

答案 1 :(得分:1)

首先,祝贺您尝试亲自动手,而不是像cURL那样预先打包。 “真正的程序员”会不时地这样做,即使它效率低或不可靠,因为它增加了我们对我们使用和构建的系统的理解。

现在,关于手头的问题。

您没有正确地将Cookie传输到服务器。您的代码只发送cookie值本身,而不是您需要发送的“Cookie”标头。发送带请求的Cookie的正确方法是Cookie: name=value,如Cookie: ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==,WLSESSION=1528980108.20480.0000

答案 2 :(得分:0)

有一件事,我试图复制的文件正好是.pdf文件

我通过浏览器检查了结果:

说网址是:

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

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

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

     <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" />

如您所见,当我点击该网址时,它会将我重定向到网址2 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" 它需要使用我的请求设置cookie,当收到cookie并设置并发送我的请求时,它会再次回复一个新的cookie !!

有什么不对的家伙?