2015-09-09 5 views
5

Я пытаюсь отправить запрос curl to googleapis, чтобы получить информацию о пользователях. Когда я использую php-скрипт для отправки запроса cURL, для завершения требуется 5 секунд, но когда я пытаюсь отправить тот же запрос непосредственно с сервера с помощью команды curl, результат возвращается мгновенно.Curl от php занимает больше времени, чем завиток через putty

Вот PHP скрипт я использую:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v2/userinfo"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization: Bearer '.$accessToken)); 
$output=curl_exec($ch); 

И вот локон команда, я использовал с замазкой:

curl --header "Authorization: Bearer xxxxxx" https://www.googleapis.com/oauth2/v2/userinfo 

Что может быть проблема?

Примечание: скрипт PHP работает на том же сервере, с которого я emmited скручивания команды с помощью шпаклевки

Примечание 2: Может быть, это какая-то проблема DNS поиска? Сначала выполнение этой же команды через командную строку также заняло около 5 секунд, потому что www.googleapis.com не было на нашем DNS-сервере. С тех пор мы добавили его вручную, а функция командной строки работает намного быстрее. Какая информация DNS используется PHP, если я обновляю информацию DNS на сервере, автоматически ли она обновляется и для PHP?

Примечание 3: рыть www.googleapis.com возвращает следующее:

; < < >> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 < < >> www.googleapis.com
;; глобальные опции: + cmd
;; Получил ответ:
;; - >> HEADER < < - код операции: QUERY, статус: NOERROR, id: 5273
;; флаги: qr rd ra; QUERY: 1, ОТВЕТ: 2, ПОЛНОМОЧИЙ: 0, ДОПОЛНИТЕЛЬНО: 0

;; РАЗДЕЛ ВОПРОСА:
; www.googleapis.com. IN A

;; РАЗДЕЛ ОТВЕТ:
www.googleapis.com. 1536 В CNAME googleapis.l.google.com.
googleapis.l.google.com. 172 IN A 216.58.218.170

;; Время запроса: 0 мс
;; СЕРВЕР: 10.0.80.11 # 53 (10.0.80.11)
;; КОГДА: ср. 9 сентября 14:35:04 2015
;; MSG SIZE RCVD: 89

+1

Как вы выполняете PHP-код? Я предполагаю, что оба успеха? –

+0

Оба успеха, оба возвращают тот же самый ответ, только для версии php требуется 5 секунд, в то время как прямая версия занимает всего 1 секунду. Вышеупомянутый PHP-код является частью большого скрипта, но если я прокомментирую $ output = curl_exec ($ ch); line, весь скрипт выполняется менее чем за секунду: | –

+1

Вы используете скрипт из CLI? Если так - вы уверены, что это проблема с завитой? У меня был аналогичный пятисекундный тайм-аут. И это была не проблема завитка, а задержка запуска php. Чтобы проверить его задачу запуска (в случае cli), просто попробуйте запустить: php -r 'echo 1;' И проверьте, сколько времени потребуется. – Endijs

ответ

2

Найден ответ на вопрос здесь:

https://stackoverflow.com/a/17816201/2691879

Установка этой опции решает проблему:

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

Я до сих пор не очень понять, почему и как это происходит/происходит, поэтому, если кто-то хочет объяснить это мне в другом ответе, вместе с вышеупомянутым решением, я отмечу это как cor прямой ответ.

Смежные вопросы