2016-07-27 19 views
0

Ich versuche, die Daten einer Seite von curl Bibliothek zu bekommen. Ich kann es mit einem einfachen Link machen, aber wenn ich ein Formular abschicke und dann die Daten bekomme, kann ich das nicht. Es gibt mir den Standardwert der Seite zurück, nicht das übermittelte Formular. Lass mich den Code erklären.php curl sendende Post Daten Problem

<input type="submit" value="مشاهده اطلاعات" name="B1"> 

<select name="madrak" size="1" class="style1" id="1"> 
    <option value="1">زير ديپلم</option> 
    <option value="5">ديپلم</option> 
    <option value="6">فوق ديپلم</option> 
    <option value="7">ليسانس</option> 
    <option value="8">فوق ليسانس</option> 
    <option value="9">دكترا</option> 
    <option selected="" value="6">فوق ديپلم</option> 
</select> 

Es scheint, dass das Formular nicht eingereicht wird:

$url = ... 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
// I'm sending post data 
$params = array(
     'madrak'=>5, 
     'B1' => 'مشاهده اطلاعات' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
// and execute... 

Die Seite Ich bin Daten immer mit asp und bilden einen Teil dieser Seite ist dies geschrieben. Denn nur ich kann die Daten bekommen, die ohne Formular beim Übermitteln geladen werden. Irgendeine Idee?

+0

$ info = curl_getinfo ($ ch); Versuche es mit print_r ($ info); um das Ergebnis zurückzurufen. Überprüfen Sie HTTP_Code Rückgabe ist 200 oder ...? –

+0

@ QuỳnhNguyễn es gibt mir null für 'http_code'. Aber es gibt Daten zurück. –

+0

Ich kann nicht glauben, http_code ist 0 und Sie haben immer noch Daten zurück. Es ist unmöglich –

Antwort

1

Zuerst sollte ich erwähnen, dass Sie keine Abfragezeichenfolge der Postdaten erstellen müssen. Sie können das Array übergeben.

Versuchen Sie, HTTP-Header zu setzen. Wie der Inhaltstyp, Benutzeragenten und usw., prüft die Zielwebsite möglicherweise nach den Kopfzeilen.

Aber der wichtigste Teil ist, Content-Type: application/x-www-form-urlencoded HTTP Header zu setzen.

curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); 
+0

Nein, es hat nicht funktioniert. Ich habe über 'http_build_query' gesucht, ich habe herausgefunden, dass ich das verwenden sollte, aber ohne diese Funktion funktioniert es nicht. –

+0

@vahidnajafi Sie senden die Daten auf die richtige Weise. Haben Sie versucht, andere HTTP-Header zu setzen? Der beste Weg, es zu testen, besteht darin, alle Header zu kopieren, die ein Browser sendet, und wenn es immer noch nicht das richtige Ergebnis liefert, sollten Sie Cookies für curl berücksichtigen. Viele Websites verwenden solche Maßnahmen, um das Crawlen von Daten zu verhindern. –

+0

Ob mit oder ohne 'http_build_query' funktioniert es nicht. –