Alt 22.10.2011, 20:01:25   #1 (permalink)
Erfahrener Benutzer

ID: 310927
Lose-Remote

Reg: 04.03.2008
Beiträge: 325
xdragonx wird schon bald berühmt werden
Standard cURL Get Requests

Hey,

Ich probiere gerade ein wenig mit cURL herum um später mal was vernüftiges damit zu programmieren. Ich habe zurzeit eigentlich nur ein Problem.

Wenn ich z.B. eine Get Request an http://www.google.de/ schicke und mir per "echo" die Antwort ausgeben lasse, so lädt mein PHP-Skript Google.

Nun werden aber weitere Get Requests vom Browser an Google geschickt. Wie kann ich z.B. die erste Get Request und gleich danach eine zweite losschicken und mir dann erst das Ergebnis ausgeben lassen?

Das Skript dazu würde dann z.B. so aussehen:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
// Zu besuchende URL
$address "http://www.google.de/";

// Cookies 
$Pref "Wert für Cookie PREF";

$NID "Wert für Cookie NID";

// UserAgent
$useragent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'

// erzeuge einen neuen cURL-Handle
$ch curl_init();


// header zusammensetzen und an CURLOPT_HTTPHEADER übergeben
$header[] = "Host: www.google.de";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header[] = "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3";
$header[] = "Accept-Encoding: gzip,deflate";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Keep-Alive: 115";
$header[] = "Connection: keep-alive";
$header[] = "Cache-Control: max-age=0";

// setze die URL und andere Optionen
curl_setopt($chCURLOPT_URL$address);
curl_setopt($chCURLOPT_USERAGENT$useragent);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_HEADERTRUE);
curl_setopt($chCURLINFO_HEADER_OUTTRUE);
curl_setopt($chCURLOPT_NOBODYFALSE);
curl_setopt($chCURLOPT_HTTPHEADER$header);
curl_setopt($chCURLOPT_ENCODING'gzip,deflate');
curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
curl_setopt($chCURLOPT_TIMEOUT25);
curl_setopt($chCURLOPT_FRESH_CONNECTTRUE);
curl_setopt($chCURLOPT_REFERER$address);
curl_setopt($chCURLOPT_COOKIE,$Pref.'; '.$NID); 
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE);

// Request abschicken und ausgeben
$response curl_exec($ch);
echo (
$response);

//Handle schließen
curl_close($ch
So ungefähr sieht das Skript aus. Damit ist aber nur eine Get Request abgedeckt. Als erste Get Request an Google schickt der Browser dann

GET /logos/2011/liszt11-hp.jpg HTTP/1.1

Die möchte ich auch per cURL abschicken, sodass diese auch nicht in Live HTTP Headers steht bzw. mein Browser sie abschickt. Jemand eine Ahnung wie man das machen kann?

Gruss xdragonx

Freuen uns über jedes Feedback!
xdragonx ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 22.10.2011, 20:49:24   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Du musst die erste Resource verstehen und dann weitere Resourcen laden.

Beispiel:
Du lädst z.B. eine HTML-Datei. Diese verweist mit <link>, <img>, <script>, <iframe>, <style> bzw. CSS-Eigenschaften auf weitere Resourcen, wie Bilder, JavaScript-Dateien, Stylesheets oder anderes. Diese musst du dann entsprechend nachladen, falls du sie nicht im Cache hast (so du einen Cache implementieren willst).

Je nachdem, was du lädst, können Folgerequests anders aussehen. Ein XML-Dokument kann z.B. weitere Requests für XSDs nach sich ziehen, um das XML zu validieren. Ein SVG kann Bilder enthalten, die du nachladen musst.

Besonders interessant ist JavaScript, weil das während der Ausführung weitere Requests nach sich ziehen kann, Stichwort AJAX.

Da ich mir aber kaum vorstellen kann, dass du in PHP einen vollständigen Webbrowser nachbauen wilst, wäre interessant, was du überhaupt vorhast
theHacker ist gerade online   Mit Zitat antworten
Alt 22.10.2011, 21:01:20   #3 (permalink)
Erfahrener Benutzer

ID: 310927
Lose-Remote

Reg: 04.03.2008
Beiträge: 325
xdragonx wird schon bald berühmt werden
Standard

Ein Browser will ich nicht nachbauen, dass wäre viel zu viel Arbeit

Möchte mich erstmal mit cURL ein wenig vertraut machen um zu schauen, was man damit überhaupt alles machen kann.

Deine Antwort ist zwar einleuchtend aber ich hab keine Ahnung wie ich da rangehen soll.

Weitere Requests die sich durch Responses mit Location ergeben müsste ich dann mit
PHP-Code:
1:
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE); 
in Verbindung bringen.

Nehmen wir mal an ich möchte nachdem ich die erste Request gesendet habe, eine zweite an "http://clients1.google.de/generate_204" schicken.
Wie würde das dann aussehen?

Die Bilder, Stylesheets, etc. lasse ich dann erstmal vom Browser laden.

Freuen uns über jedes Feedback!

Geändert von xdragonx (22.10.2011 um 21:15:25 Uhr)
xdragonx ist offline Threadstarter   Mit Zitat antworten
Alt 23.10.2011, 06:22:37   #4 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von xdragonx Beitrag anzeigen
Möchte mich erstmal mit cURL ein wenig vertraut machen um zu schauen, was man damit überhaupt alles machen kann.
cURL sendet einen Request an einen Server und nimmt dir dabei protokollspezifische Sachen ab, z.B. einem Location-Header hinterherzurennen.
Zitat:
Zitat von xdragonx Beitrag anzeigen
Deine Antwort ist zwar einleuchtend aber ich hab keine Ahnung wie ich da rangehen soll.
Was willst du denn tun? In PHP Browserfunktionalität nachzubauen is eh relativ sinnlos, außer, du willst dir bloß Verständnis/Techniken aneignen.

Zitat:
Zitat von xdragonx Beitrag anzeigen
Weitere Requests die sich durch Responses mit Location ergeben müsste ich dann mit
PHP-Code:
1:
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE); 
in Verbindung bringen.
Richtig. Antwortet ein Server mit z.B. 301, so kümmert sich cURL drum, an der anderen Stelle erneut nachzufragen.

Du kannst das schön mit Google testen: Wenn du auf google.de verbindest und / anfragst, kriegst du ein 301 auf www.google.de.
Zitat:
Zitat von xdragonx Beitrag anzeigen
Nehmen wir mal an ich möchte nachdem ich die erste Request gesendet habe, eine zweite an "http://clients1.google.de/generate_204" schicken.
Wie würde das dann aussehen?
Analog wie der erste Request. HTTP ist prinzipiell zustandslos. Die Reihenfolge von Requests und deren Inhalt is (aus Protokollsicht) egal. (Natürlich macht es effektiv schon einen Unterschied, ob du z.B. erst ein Login-Formular absendest und danach eine Unterseite des Login-Bereichs anfragst oder andersrum.)
theHacker ist gerade online   Mit Zitat antworten
Alt 23.10.2011, 15:10:00   #5 (permalink)
Erfahrener Benutzer

ID: 310927
Lose-Remote

Reg: 04.03.2008
Beiträge: 325
xdragonx wird schon bald berühmt werden
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Was willst du denn tun? In PHP Browserfunktionalität nachzubauen is eh relativ sinnlos, außer, du willst dir bloß Verständnis/Techniken aneignen.
Wie gesagt, ich möchte zwar keinen Browser nachbauen, aber mit cURL trotzdem aneignen.

Zitat:
Zitat von theHacker Beitrag anzeigen
Analog wie der erste Request. HTTP ist prinzipiell zustandslos. Die Reihenfolge von Requests und deren Inhalt is (aus Protokollsicht) egal. (Natürlich macht es effektiv schon einen Unterschied, ob du z.B. erst ein Login-Formular absendest und danach eine Unterseite des Login-Bereichs anfragst oder andersrum.)
Okay das ist klar nur wie gebe ich zwei Requests aus? Das abschicken und empfangen ist hier ja dann nicht das Problem. Die Frage ist jetzt wie ich den Inhalt so ausgebe, dass diese beiden Requests "erledigt wurden".

Freuen uns über jedes Feedback!
xdragonx ist offline Threadstarter   Mit Zitat antworten
Alt 23.10.2011, 15:17:27   #6 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von xdragonx Beitrag anzeigen
Okay das ist klar nur wie gebe ich zwei Requests aus? Das abschicken und empfangen ist hier ja dann nicht das Problem. Die Frage ist jetzt wie ich den Inhalt so ausgebe, dass diese beiden Requests "erledigt wurden".

PHP-Code:
1:
2:
echo ($response1);
echo (
$response2); 
theHacker ist gerade online   Mit Zitat antworten
Alt 23.10.2011, 15:38:20   #7 (permalink)
Erfahrener Benutzer

ID: 310927
Lose-Remote

Reg: 04.03.2008
Beiträge: 325
xdragonx wird schon bald berühmt werden
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen

PHP-Code:
1:
2:
echo ($response1);
echo (
$response2); 
Schön wäre es, wenn es so funktionieren würde

Die erste Request ist weg, die zweite noch da.

Ist das erste gewesen was ich ausprobiert habe.

EDIT: Funktioniert nun komischerweise doch.

Danke für die Hilfe

Freuen uns über jedes Feedback!

Geändert von xdragonx (23.10.2011 um 15:49:45 Uhr)
xdragonx ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[C#] Curl Rückgabe auslesen Bububoomt Programmierung 1 12.06.2011 20:27:36
[S] Jemanden, der sich mit php / Curl auskennt Bercki Lose4Scripts 5 21.05.2010 20:36:27
curl in php.ini erlauben Tab Webhosting 3 18.04.2010 11:59:32
[PHP] Bei cURL kommt error... [Close] Maddin Programmierung 7 21.11.2009 18:29:32
[PHP]Richtige URL herausfinden.. CURL? NoX Programmierung 4 21.09.2008 11:52:34


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10:12 Uhr.