2010-01-01 4 views
0

Je voulais copier des fichiers à partir d'un serveur distant, mais il semble que l'hôte distant utilise la session, et a besoin de cookies.copier des données à partir du serveur distant - J'ai un problème

bien j'utilisé cette méthode après la définition des variables ...

$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); 

maintenant j'ai l'en-tête avec les cookies que l'URL dit:

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. 

alors je l'ai fait un peu de code piqûre et construit ceci dans le code:

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

re-demandant l'URL avec même moi Thod mentionné ci-dessus et encore j'ai même en-tête avec un autre des cookies

Il coutures que le site distant me traite comme un premier temps visiteur à chaque fois et définit de nouveaux cookies gagner

ce qui est faux?

Répondre

1

Tout d'abord, félicitations pour avoir essayé de le faire à la main vous-même au lieu d'utiliser quelque chose de préemballé comme cURL. Les «vrais programmeurs» le font de temps en temps, même si c'est moins efficace ou fiable, car cela nous permet de mieux comprendre les systèmes que nous utilisons et construisons.

Maintenant, sur le problème à portée de main.

Vous ne transmettez pas les cookies au serveur correctement. Votre code envoie uniquement la valeur du cookie lui-même, pas les en-têtes "Cookie" que vous devez envoyer. La manière correcte d'envoyer un cookie avec une demande est Cookie: name=value, comme dans Cookie: ERIGHTS=5YAaxxmNsMuTK87E1TCAohwDRuyqBaCgM-oehmg24bkzHplCtmgn7zMA==,WLSESSION=1528980108.20480.0000.

+0

merci :), je veux savoir ce que je fais, en utilisant cURL, je suis aveugle ........ la différence entre ce que j'ai dit et u est un espace, j'ai inclus un espace mien: ... n7zMA ==, WLSESSION = 1528 ... le vôtre: n7zMA ==, WLSESSION = 1528 est-ce le problème? – Alireza

+0

même résultat: l'en-tête dit: HTTP/1.1 302 Déplacé temporairement Longueur du contenu: 0 Type de contenu: text/html Serveur: Sun-ONE-Web-Server/6.1 Date: Ven, 01 Jan 2010 03:30:17 GMT Set-cookie: ERIGHTS = x2BFYIx2BVvODdWm9hREdxxH2PYux2Ff3BSmqQ9-hhBHcMigRXArbhL4YBG81w ==; chemin = /; domaine = .exemple.org Set-cookie: WLSESSION = 1562534540.20480.0000; expires = Sat, 02-Jan-2010 03:30:18 GMT; chemin =/Lieu: http: //example.org/example.mp3&tag=1 le serveur l'envoie en-tête avec de nouveaux cookies !! – Alireza

+0

Eh bien, la différence entre votre code d'origine et le mien est que le vôtre n'a pas "Cookie:" au début des cookies $. Cela signifie que les cookies ne sont pas reconnus comme cookies. Les espaces entre plusieurs cookies dans un seul en-tête sont facultatifs. –

1

Il semble que beaucoup de problèmes soient liés à la création de la requête HTTP. Pourquoi ne pas utiliser quelque chose comme cURL en PHP qui supports cookies hors de la boîte.

+0

merci semble que je dois oublier tout mon code et se tourner vers cURL :(:( – Alireza

0

il y a une chose, le fichier que je suis en train de copier est un fichier .pdf exactement

j'ai vérifié que mon navigateur, les résultats:

disent que l'URL est:

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

J'ai vérifié le code source de l'URL, il contient une redirection vers une autre page qui est soit un javascript avec iframe

source de la page (de mon navigateur)

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

que vous voyez lorsque je clique sur l'URL, il me redirige vers url2 le URL2 est la suivante: http://example.com/stampPDF/getPDF.jsp?tp=&arnumber=5255176&isnumber=5255174

le URL2 contient. Fichier pdf Je peux facilement copier (télécharger). Mais quand j'utilise mon code mentionné ci-dessus, $url="http://example.com/stamp/stamp.jsp?tp=&arnumber=5255176&isnumber=5255174" il faut des cookies pour régler avec ma demande, quand recevoir des cookies et régler et envoyer des cookies avec ma demande, il répond à nouveau un nouveau cookie !!

Qu'est-ce qui ne va pas?

Questions connexes