POST vars

Programovacie jazyky, rady, poradňa...
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Pri rapide mi to hlasi:

Kód: Vybrať všetko

Fatal error: Function name must be a string in /home/ftpsite/domczo.profitux.cz/kuk2.php on line 65
//

Kód: Vybrať všetko

$print($response);
Mozem sa opytat, kde je string stranky?

Nastavil som prava 777, ziadna zmena.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Odpoveď je práve v tom $response. Upravoval si ten skript nejako? Mne fungoval bez problémov. Skús nahradiť print($response); príkazom echo($response);

// chrono: Nepokazil si v tom skripte nejaké úvodzovky?
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Ja som tlk. Tu mi to bije do oci neviem odkial sa tam vzal ten dolar, sory.

Kód: Vybrať všetko

$print
Este raz som si zdrojovy kod skopiroval.
upravil som tam napriklad:

Kód: Vybrať všetko

http_post("http://ul23.rapidshare.com/files/2024261/car-rzr.part01.rar", "ul23.rapidshare.com", "dl.start=Free");
404 Not Found, ale stranka by mala existovat.

S tymto html kodom stranka existuje.

Kód: Vybrať všetko

<body onload=abc1.submit();>
<form name="abc1" action="http://ul23.rapidshare.com/files/2024261/car-rzr.part01.rar" method="post">
<input type="hidden" name="dl.start" value="Free">
</form>
</body>
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Neviem prečo, ale má to problém keď sa posiela Content-Length. Skús odstrániť ten riadok.
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Ked ten riadok zakazem, tak to nic neodosiela.
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Uz som to nasiel a som cely happy. Bolo to o skript nizsie ako si mi ho pisal ty a upravil zo stranky http://www.php.net/fsockopen.

Kód: Vybrať všetko

<?php


$host = "www.adresa.sk";
$port = 80;
$path = "/"; //or .dll, etc. for authnet, etc.

//you will need to setup an array of fields to post with
//then create the post string
$formdata = array ( "nieco" => "Niecoooo");
//build the post string
  foreach($formdata AS $key => $val){
   $poststring .= urlencode($key) . "=" . urlencode($val) . "&";
  }
// strip off trailing ampersand
$poststring = substr($poststring, 0, -1);

$fp = fsockopen("".$host, $port, $errno, $errstr, $timeout = 30);

if(!$fp){
 //error tell us
 echo "$errstr ($errno)\n";
  
}else{

  //send the server request
  fputs($fp, "POST $path HTTP/1.1\r\n");
  fputs($fp, "Host: $host\r\n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
  fputs($fp, "Connection: close\r\n\r\n");
  fputs($fp, $poststring . "\r\n\r\n");

  //loop through the response from the server
  while(!feof($fp)) {
   echo fgets($fp, 4096);
  }
  //close fp - we are done with it
  fclose($fp);
}


?>
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ale hento si neporadí s 'Transfer-Encoding: chunked'. :)

// crono: toto už konečne funguje (prečítal som si špecifikáciu http)

Kód: Vybrať všetko

<?php

$header = "";
$response = "";

function http_post($host, $path, $postdata)
{
	global $header, $response;

	// connect
	if (!($request=fsockopen($host, 80, $errno, $errstr, 10))) {
		exit($errstr);
	} else {
		$post = "POST $path HTTP/1.1\r\n";
		$post .= "Host: $host\r\n";
		$post .= "User-Agent: PHP Script\r\n";
		$post .= "Content-Type: application/x-www-form-urlencoded\r\n";
		$post .= "Content-Length: ".strlen($postdata)."\r\n";
		$post .= "Connection: close\r\n\r\n";
		$post .= $postdata;

		fwrite($request, $post);

		do {
			$header .= fread($request, 1);
		} while (!preg_match('/\\r\\n\\r\\n$/',$header));

		if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header)) {
			do {
				$byte = "";
				$chunk_size = "";
				do {
					$chunk_size .= $byte;
					$byte=fread($request, 1);
				} while ($byte != "\\r");
				fread($request, 1);
				$chunk_size = hexdec($chunk_size);
				$response .= fread($request,$chunk_size);
				fread($request, 2);
			} while ($chunk_size);
		} else {
			if (preg_match('/Content\\-Length:\\s+([0-9]*)\\r\\n/', $header, $matches)) {
				$size = $matches[1];
				$response = "";
				while (!feof($request) && $size > 0) {
					$response .= fread($request, min(4096, $size));
					$size -= 4096;
				}
			} else {
				while (!feof($request)) $response .= fread($request, 4096);
			}
		}
		fclose($request);
	}
}

http_post("ul23.rapidshare.com", "/files/2024261/car-rzr.part01.rar", "dl.start=Free");
print($header);
print($response);
?>
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Ok diki. Co je to to 'Transfer-Encoding: chunked', k comu je to potrebne? :)

Uprava
Skusal som teraz ten tvoj posledny skript. Vacsinou to nestiahne celu stranku a vytrcaju potom zdrojove kody. No niekedy sa skriptu podari stranku stiahnut celu, zaujimave.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ak v hlavičke odpovede nie je to 'Transfer-Encoding: chunked', tak dáta sú v "jednom kuse".
Ak to tam je, dáta sú rozdelené na menšie bloky. Každý blok obsahuje veľkosť (ako 16-kové číslo + odriadkovanie) a samotné dáta. Ak by si to stiahol ako bez 'chunked', medzi dátami by boli aj tieto veľkosti (a teda dáta by boli nepoužiteľné).
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Ale mal si pravdu. Riesit to skorej cez Greasemonkey je ovela lepsie. Taky pekny skript som si nasiel na http://userscripts.org :-)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Greasemonkey je momentálne moje najobľúbenejšie rozšírenie pre Firefox :wink:
Napísať odpoveď