2015-03-30 8 views
9

Ich kann den Host in curl nicht festlegen. Es zeigt immer noch als localhost, wenn ich den folgenden Codekann Host in CURL nicht setzen PHP

function wget($url) 
     { 

      $agent= 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1'; 
      $curlHeaders = array (
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
        'Accept-Encoding: gzip, deflate', 
        'Accept-Language: en-US,en;q=0.5', 
        'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1', 
        'Connection: Keep-Alive', 
        'Pragma: no-cache', 
        'Referer: http://example.com/', 
        'Host: hostname', 
        'Cache-Control: no-cache', 
        'Cookie: visid_incap_185989=9v1q8Ar0ToSOja48BRmb8nn1GFUAAAAAQUIPAAAAAABCRWagbDIfmlN9NTrcvrct; incap_ses_108_185989=Z1orY6Bd0z3nGYE2lbJ/AXn1GFUAAAAAmb41m+jMLFCJB1rTIF28Mg==; _ga=GA1.3.637468927.1427699070; _gat=1; frontend=rqg7g9hp2ht788l309m7gk8qi7; _gat_UA-1279175-12=1; __utma=233911437.637468927.1427699070.1427699078.1427699078.1; __utmb=233911437.2.10.1427699078; __utmc=233911437; __utmz=233911437.1427699078.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt_UA-1279175-1=1; _cb_ls=1; _chartbeat2=S0WVXDwMWnCFBgQp.1427699081322.1427699232786.1; PRUM_EPISODES=s=1427699568560&r=http%3A//example.com/' 

      ); 
      $ch = curl_init(); 
      curl_setopt ($ch, CURLOPT_HTTPHEADER, $curlHeaders); 
      curl_setopt ($ch, CURLOPT_HEADER, TRUE); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
      curl_setopt($ch, CURLOPT_URL,$url); 
      $result=curl_exec($ch); 
      return $result; 
     } 

I fiddler verwenden, um die Netzwerkanforderungen zu verfolgen. wo ich der Host gefunden ist nach wie vor als localhost enter image description here

Wenn ich diesen gleichen Link in Browser laden i erhalten, wie in den folgenden fiddler

enter image description here

Ich brauche meine angegebene Domäne zugegriffen werden kann. Wie kann ich das erreichen? Hinweis: Mir ist bekannt, dass der Hostname das Protokoll nicht enthalten sollte.

Alternativ

Auch möchte ich wissen, ist es möglich, den Quellcode einer Website bekommen die in Browser über Terminal zu sehen war?

+0

Ich würde vorschlagen, mit dem Hinzufügen von 'curl_setopt ($ ch, CURLOPT_VERBOSE, true);' zu Ihrem Code und überprüfen, was tatsächlich in der Backgo passiert und. Sie werden wahrscheinlich viel mehr Informationen bekommen als von Fiedler. –

+0

Ich habe Ihren Code ausprobiert. Andere Datei empfängt Header 'Host: Hostname'.Ich denke, dass Sie so etwas brauchen, dass meine Website als "stackoverflow.com" maskiert wird, was schwierig ist. Sie können Header ändern, aber nicht HTTP-Protokoll (nicht einfach zu tun). – Kristiyan

+1

Also habe ich das auf mehreren Hosts ausgeführt, auf die ich Zugriff habe, indem ich die URL in den Funktionsaufruf füttere und es läuft einwandfrei. Sie müssen einige Dinge überprüfen und weitere Informationen bereitstellen. 1) Wie wird diese URL in den Funktionsaufruf eingefügt, sind Sie sicher, dass sie richtig eingestellt ist? dh. wenn Sie $ result = wget ($ satururl) aufrufen; Stellen Sie sicher, dass $ someurl korrekt eingestellt ist. 2) Überprüfen Sie Ihre Hostdatei und Proxy-Einstellungen. – webternals

Antwort

1

versuchen wie diese,

curl_init('XXX.XXX.XXX.XXX'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: subdomain.hostname.com')); 
+0

Dies funktioniert nicht ... – DharanBro

+0

versuchen Sie das, $ ipaddress = 'wanted_ip'; $ url = 'Pfad/zu/Datei?'; curl_init ('http: //'.$ipaddress.$url); –

+0

Ich arbeite mit Windows und XAMPP .. wäre es irgendein Problem damit? – DharanBro

1

Wenn Sie Fenster und xampp dann versuchen verwenden virtuellen Host zu verwenden anstatt localhost, dann wird es anfangen zu arbeiten, habe ich das gleiche tat.

+0

Wie man virtuellen Host verwendet – DharanBro

+0

Hier klicken, um den virtuellen Host http: // sawmac einzurichten. com/xampp/virtualhosts/ –

-1

Stellen Sie die vollständige URL in CURLOPT_UR L.

1

Nach HTTP schnellen Spezifikation zu lesen, gehe ich davon aus Ihren Problemen geschehen senden wegen falschen Host Header zu sein. Ich war in der Lage, einige Webseiten mit folgendem Code zum Download:

function wget($url, $follow = true) { 

    $host = parse_url($url); 

    $agent  = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1'; 
    $curlHeaders = array(
     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'Accept-Encoding: gzip, deflate', 
     'Accept-Language: en-US,en;q=0.5', 
     'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1', 
     'Connection: Keep-Alive', 
     'Pragma: no-cache', 
     'Referer: http://example.com/', 
     'Host: ' . $host['host'] . (isset($host['port']) ? ':' . $host['port'] : null), // building host header 
     'Cache-Control: no-cache', 
     'Cookie: visid_incap_185989=9v1q8Ar0ToSOja48BRmb8nn1GFUAAAAAQUIPAAAAAABCRWagbDIfmlN9NTrcvrct; incap_ses_108_185989=Z1orY6Bd0z3nGYE2lbJ/AXn1GFUAAAAAmb41m+jMLFCJB1rTIF28Mg==; _ga=GA1.3.637468927.1427699070; _gat=1; frontend=rqg7g9hp2ht788l309m7gk8qi7; _gat_UA-1279175-12=1; __utma=233911437.637468927.1427699070.1427699078.1427699078.1; __utmb=233911437.2.10.1427699078; __utmc=233911437; __utmz=233911437.1427699078.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt_UA-1279175-1=1; _cb_ls=1; _chartbeat2=S0WVXDwMWnCFBgQp.1427699081322.1427699232786.1; PRUM_EPISODES=s=1427699568560&r=http%3A//example.com/' 
    ); 
    $ch   = curl_init(); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); // following redirects or not 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    $result  = curl_exec($ch); 
    return $result; 
} 

echo(wget('http://example.com')); 

Auf jeden Fall ist diese Funktion nicht ein universelles Build ist. Persönlich würde ich das Speichern von Cookies zwischen Umleitungsanfragen usw. hinzufügen. Wesentliche Änderungen sind innerhalb der 'Host'-Kopfzeile. Ich baue dort richtig Host Header auf volle $url Header zur Verfügung gestellt, um zu funktionieren.

+0

Ich fand die Website, die ich versuche zu kratzen ist mit JS zu validieren/überprüfen, ob die Anfrage über den Browser gesendet wird. Wenn es mit Browser geöffnet wird, ist der Host example.com und lädt nach einer Datei 'example.com/verify.js'. Wenn die Anfrage über den Browser gesendet wird, wird sie nach 'localhost/verify.js' geladen. Davor gibt der obige Code ein Javascript zurück, das ich im browser inspect-Element sehen konnte. – DharanBro

+0

@DharanBro Ganz verstehe nicht deinen Kommentar. Funktioniert es oder hat es noch Probleme? – yergo

+0

Es funktioniert nicht. – DharanBro

3

wir davon aus nicht versuchen Parodie der Host Header, lassen Sie den Host Header zusammen und lassen curl sort it out. In diesem Fall, entfernen Sie einfach 'Host: hostname',, weil Sie bereits locken, um dies automatisch mit Ihrem Code in der Nähe der Unterseite mit curl_setopt($ch, CURLOPT_URL, $url); zu setzen.

Wenn Sie wirklich das Host Header selbst, setzen wollen, dann ersetzen Sie einfach

'Host: hostname', 

mit

"Host: ". parse_url($url, PHP_URL_HOST),

(. Hinweis: Diese Funktion mit relativer URLs nicht funktioniert)

Verwandte Themen