Всем привет. У меня есть сайт (ubuntu server, php, nginx). Он связан с другим сайтом и отправляет много POST запросов на API этого другого сайта. В день уходит примерно 10000 запросов. Из них 2000 не успешных. Отправляю запросы с помощью CURl: Код (PHP): $ch = curl_init('http://api.other-site.com/api'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'field1' => 'value1', 'field2' => 'value2', ... ])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); $error = curl_error($ch); curl_close($ch); При не успешных запросах в переменную $error ложится строка: Recv failure: Connection reset by peer Я хочу выяснить из-за чего такая не стабильная связь. Скорее всего не стабильный интернет канал между моим сервером и сервером API. В идеале было бы сделать скрипт, который бы отправил 10000 тестовых запросов с моего сервера на сервер API, и при этом подробно бы залогировал через какие промежуточные сервера шел запрос, и на каком оборвался в случае не успешного выполнения. Т.е. что бы лог был примерно в таком виде: 2015-10-15 10:10:12 success Request: URL: http://api.other-site.com/api METHOD: POST PARAMS: field1=value1&field2=value2&field3=value3 123.236.100.240 server1.com 123.236.99.240 server2.com 123.6.100.240 server3.com 123.6.100.20 api.other-site.com Response: 123.6.100.20 api.other-site.com 123.6.100.240 server3.com 123.236.99.240 server2.com 123.236.100.240 server1.com 2015-10-15 10:10:12 error Request: URL: http://api.other-site.com/api METHOD: POST PARAMS: field1=value1&field2=value2&field3=value3 123.236.100.240 server1.com 123.236.99.240 server2.com 123.6.100.240 server3.com CONNECTION RESET NO RESPONSE Этот скрипт будет запускаться из под консоли сервера. Возможно такой написать на PHP, или каком то другом языке? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
В итоге остановился на баш команде tcptraceroute Эта команда как раз стучится на 80-й порт и показывает через какие промежуточные сервера проходит запрос. Сделал баш скрипт, который переодически выполняет эту команду и логирует результаты. Запустил его на несколько часов, после чего проанализировал логи и выяснилось что запросы все таки сбрасывает API сервер к которому я обращаюсь. Т.к. через все промежуточные сервера зарос проходит стабильно, а при обрыве если посмотреть по логу он всегда происходил именно на конечном сервере. Так что команда помогла выяснить где именно обрывается запрос. Код баш скрипта: Код (Text): while [ 1 = 1 ] do date >> ./trace-so.log tcptraceroute api.server.com >> ./trace-so.log done