Oznámení

Fórum bylo uzavřeno. Využijte prosím služeb serverů JakPsatWeb, Builder nebo Webtrh.

#1 před 4 měsíci

Ghandi
Člen
Registrovaný: 25. 1. 2012
Příspěvky: 1

Potize s POST fromularem prez curl

php 5.3.0
Zdravím.
Snažím se skriptem poslat data do formuláře který vyhledá produkt od Lenova a vypíše jakou má záruku.
Nedokážu ale protlačit data do POST formuláře a nevím proč.
Stránky josu : https://services.lenovo.com/…tyLookup.jsp
Skript

<?php
function array_implode( $glue, $separator, $array ) { //Funkce kerá převede pole na string ve formátu "foo=bar&foo2=bar2"
if ( ! is_array( $array ) ) return $array;
  $string = array();
  foreach ( $array as $key => $val ) {
    if ( is_array( $val ) )
      $val = implode( ',', $val );
      $string[] = "{$key}{$glue}{$val}";
  }
return implode( $separator, $string );
}
$cookieFileName = "C:\wamp\www\POKUS\cookie.txt";
$errorLogName = "errorlog.txt";
$errorLog = fopen($errorLogName, "w");
$curl = curl_init();
$url = "https://services.lenovo.com/ibapp/il/WarrantyLookup.jsp";
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_STDERR, $errorLog);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFileName);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFileName);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$post['country'] = "897";
$post['iws'] = "off";
$post['sitestyle'] = "lenovo";
$post['type'] = "";
$post['productId'] = "2";
$post['selLanguage'] = "EN";
$post['warrantySubmit2'] = "1";
$query = array_implode( '=', '&', $post );

curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $query);

echo "Poslal jsem tato data: ".$query."<br />\n"; // jen pro jistotu si vypisuju jestli jsem v post_fields neposlal nejakej nesmysl

$vysledek = curl_exec ($curl);
curl_close ($curl);
fclose($errorLog);
echo ($vysledek);
?>

Verbose mi vraci tento vypis:

* About to connect() to services.lenovo.com port 443 (#0)
* Trying 2.16.219.67... * connected
* Connected to services.lenovo.com (2.16.219.67) port 443 (#0)
* SSL connection using AES256-SHA
* Server certificate:
* subject: C=CN, L=Beijing, O=Lenovo, OU=GIS, ST=Beijing, CN=*.lenovo.com
* start date: 2011-11-07 19:02:10 GMT
* expire date: 2012-11-07 19:02:10 GMT
* common name: *.lenovo.com (matched)
* issuer: C=US, O=Akamai Technologies Inc, CN=Akamai Subordinate CA 3
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> POST /ibapp/il/WarrantyLookup.jsp HTTP/1.1
Host: services.lenovo.com
Accept: */*
Cookie: JSESSIONID=(J2EE41702500)ID2027983251DB00315726265101269404End; saplb_*=(J2EE41702500)41702551
Content-Length: 87
Content-Type: application/x-www-form-urlencoded

< HTTP/1.1 200 OK
< Server: SAP J2EE Engine/7.01
< Content-Type: text/html; charset=UTF-8
< Date: Wed, 25 Jan 2012 15:32:39 GMT
< Content-Length: 25461
< Connection: keep-alive
<
* Connection #0 to host services.lenovo.com left intact
* Closing connection #0

Nevidím tam žádné chyby ale přesto místo stránky s výsledkem pořád dostávám jen tu úvodní stranu s formulářem.
Hodně by pomohlo kdyby mě někdo navedl na to, kde jsem udělal botu.
Díky.

Editoval Ghandi (25. 1. 17:09)

 

#2 před 4 měsíci

HosipLan
Člen
Registrovaný: 1. 6. 2009
Příspěvky: 2635

Re: Potize s POST fromularem prez curl

No nevím, máš to sice zbytečně komplikované, ale chybu nevidím.

Všiml sis, na co to přesměrovává?

"If you receive the warning below, please click "NO" to continue
Please click "OK" to continue.
Ok

Vidím, že tam mají nějaké ajaxové hovadiny, které by sis měl pořádně projít.

Trošku jsem ti to zjednodušil

$cookieFileName = "C:\wamp\www\POKUS\cookie.txt";

$curl = curl_init("https://services.lenovo.com/ibapp/il/WarrantyLookup.jsp");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFileName);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFileName);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$post['country'] = "897";
$post['iws'] = "off";
$post['sitestyle'] = "lenovo";
$post['type'] = "";
$post['productId'] = "2";
$post['selLanguage'] = "EN";
$post['warrantySubmit2'] = "1";

curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);

$vysledek = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close ($curl);

var_dump($info);
echo $vysledek;

Editoval HosipLan (25. 1. 18:39)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

Zápatí