Intereting Posts

PHP cURL не видит файл / etc / hosts

У меня возникли проблемы с тем, чтобы библиотека PHP cURL распознала псевдоним, который я создал в /etc/hosts .

Это то, что у меня есть в /etc/hosts прямо сейчас:

 192.168.0.20 www.example.dev 

С другой стороны (192.168.0.20) Apache настроен на запуск виртуального хоста в домене example.dev . Псевдоним работает, если я тестирую его в своем браузере, но с PHP cURL просто не работает.

Файл hosts находится на обеих машинах (192.168.0.10 <= PHP cli, 192.168.0.20 <= Apache) .

Для полноты это код PHP, который я использую.

  $this->url = 'http://www.example.dev/'; $this->ch = curl_init(); $header = array ( "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3", "Accept-Encoding: gzip,deflate,sdch", "Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4", "Cache-Control: max-age=0", "Connection: keep-alive", ); $sUserAgent = $this->tor ? UserAgents::getRandom() : UserAgents::CHROME16_LINUX; curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header); curl_setopt($this->ch, CURLOPT_USERAGENT, $sUserAgent); curl_setopt($this->ch, CURLOPT_URL, $this->url); curl_setopt($this->ch, CURLOPT_HEADER, false); curl_setopt($this->ch, CURLINFO_HEADER_OUT, true); curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, (bool) $waitResponse); curl_setopt($this->ch, CURLOPT_VERBOSE, (bool) $this->verbose); curl_setopt($this->ch, CURLOPT_PORT, $this->port); curl_setopt($this->ch, CURLOPT_AUTOREFERER, true); curl_setopt($this->ch, CURLOPT_MAXREDIRS, 10); curl_setopt($this->ch, CURLOPT_ENCODING, ''); curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($this->ch, CURLOPT_TIMEOUT, 60); curl_setopt($this->ch, CURLOPT_DNS_CACHE_TIMEOUT, 120); curl_setopt($this->ch, CURLOPT_COOKIESESSION, true); curl_setopt($this->ch, CURLOPT_COOKIEFILE, 'cookie'); foreach ($this->files as $k => $file) { $this->data['_file_' . $k] = '@' . $file; } curl_setopt($this->ch, CURLOPT_POST, true); curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->data); $this->result = curl_exec($this->ch); 

Примечание. Эта проблема кажется такой, но связана с PHP.

    Решенный с использованием этого URL-адреса "http://192.168.0.20/&quot; вместо "http://www.example.dev&quot;

    Также необходим заголовок «Host» …

     $header = array ( "Host: www.example.dev", // IMPORTANT "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3", "Accept-Encoding: gzip,deflate,sdch", "Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4", "Cache-Control: max-age=0", "Connection: keep-alive", ); curl_setopt($this->ch, CURLOPT_URL, 'http://192.168.0.20/'); curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header); 

    Вероятно, вы запускаете PHP на этом сервере apache, и там у вас нет записи файла hosts.