2015-03-30 20 views
9

Non riesco a impostare l'host in arricciatura. Si mostra ancora come localhost se io uso il seguente codicecan set Host in CURL 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; 
     } 

Io uso fiddler per tenere traccia delle richieste di rete. dove ho trovato il padrone di casa è ancora come localhost enter image description here

Se carico questo stesso link in del browser ottengo come segue in fiddler

enter image description here

ho bisogno del mio dominio specificato a cui accedere. Come posso raggiungere questo obiettivo? Nota: sono consapevole che il nome host non deve contenere il protocollo.

alternativa

Inoltre vorrei sapere è possibile ottenere il codice sorgente di un sito web potrebbe essere visto in del browser attraverso il terminale?

+0

Vorrei suggerire di iniziare con l'aggiunta di 'curl_setopt ($ ch, CURLOPT_VERBOSE, true);' al codice e controllare cosa sta effettivamente accadendo nel backgo und. Probabilmente otterrai molte più informazioni rispetto al violinista. –

+0

Ho provato il tuo codice. L'altro file riceve l'intestazione 'Host: hostname'.Penso che tu abbia bisogno di qualcosa del genere per mascherare il mio sito web come "stackoverflow.com", che è difficile da fare. È possibile modificare le intestazioni, ma non il protocollo HTTP (non facile da fare). – Kristiyan

+1

Quindi l'ho eseguito su diversi host a cui ho accesso inserendo l'url nella chiamata alla funzione e funziona perfettamente. È necessario controllare alcune cose e fornire maggiori informazioni. 1) Come viene inserito l'URL nella chiamata alla funzione, sei sicuro che sia impostato correttamente. vale a dire. se chiami $ result = wget ($ someurl); Assicurati che $ someurl sia impostato correttamente. 2) Controlla le impostazioni del file host e del proxy. – webternals

risposta

1

provare come questo,

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

Questo non funziona ... – DharanBro

+0

provare in questo modo, $ ipaddress = 'desired_ip'; $ url = 'percorso/su/file?'; curl_init ('http: //'.$ipaddress.$url); –

+0

Sto lavorando con windows e xampp .. sarebbe un problema con esso? – DharanBro

1

Se si utilizza Windows e XAMPP quindi provare a utilizzare host virtuale anziché localhost, allora inizierà a lavorare, ho fatto lo stesso.

+0

come utilizzare l'host virtuale – DharanBro

+0

controllare qui per configurare l'host virtuale http: // sawmac. com/xampp/virtualhosts/ –

1

Secondo HTTP rapida specifica lettura, presumo vostri problemi stanno accadendo a causa della non corretta Host intestazione essendo inviare. Sono stato in grado di scaricare alcuni siti Web con il seguente codice:

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')); 

In ogni caso questa funzione non è una build universale. Personalmente aggiungo i cookie di salvataggio tra le richieste di reindirizzamento ecc. La modifica essenziale si trova nella riga dell'intestazione "Host". Sto costruendo lì l'intestazione Host corretta basata sul pieno $url fornito per funzionare.

+0

Ho trovato il sito Web che sto cercando di analizzare utilizzando JS per convalidare/verificare se la richiesta viene inviata tramite browser. se è aperto con il browser, l'host è example.com e carica per un file 'example.com/verify.js'. Quindi, se la richiesta viene inviata tramite browser, carica per 'localhost/verify.js'. Prima che il codice sopra riportato restituisca un javascript che potrei vedere nell'elemento inspect del browser. – DharanBro

+0

@DharanBro Abbastanza non capisco il tuo commento. Funziona o ha ancora problemi? – yergo

+0

Non funziona. – DharanBro

3

Supponendo siamo non cercando spoof l'intestazione Host, omettere l'intestazione Host tutto e lasciate arricciatura risolverlo. In questo caso, è sufficiente rimuovere 'Host: hostname', perché si ottiene già arricciamento per impostare automaticamente questo con il codice vicino alla parte inferiore con curl_setopt($ch, CURLOPT_URL, $url);.

Se davvero si vuole impostare l'intestazione Host te stesso, allora basta sostituire

'Host: hostname', 

con

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

(Nota:. Questa funzione non funziona con URL relativi)