есть подобный код Session := InternetOpen(PChar(user_agent), INTERNET_OPEN_TYPE_PROXY, PChar(proxyip), nil, 0); InternetSetOption(Session, INTERNET_OPTION_PROXY_USERNAME, PChar(login), Length(login) + 1); InternetSetOption(Session, INTERNET_OPTION_PROXY_PASSWORD, PChar(pass), Length(pass) + 1); hS := InternetConnect(Session, PChar(hostname), INTERNET_DEFAULT_HTTP_PORT, PChar(login), PChar(pass), INTERNET_SERVICE_HTTP, 0, 0); .. при запуске ехе удачно коннектится к проксе, авторизируется и выкачивает все что необходимо (при запуске хоть из проводника. хоть из консоли), но когда этот же скомпилированный ехе запускать из php скриптом system() или exec(), то выдается ошибка 407 прокси, почему? (без использования прокси, INTERNET_OPEN_TYPE_DIRECT, конечно же ехе удачно все качает как из консоли, так и при запуске скриптом)
Если верить гуглу, то проблема в авторизации Запусти снифер, посмотри какие пакеты шлются в обоих случаях и в чем отличие.
>>Если верить гуглу, то проблема в авторизации именно, 407 ошибка, но вот почему она возникает непонятно >>Запусти снифер, посмотри какие пакеты шлются в обоих случаях и в чем отличие. тем, что при запуске изпод пхп режутся(не шлются) поля хедера Proxy-Connection: Keep-Alive Proxy-Authorization: Basic blablabla== тоесть в оригинале происходит такео взаимодействие: * Запрос клиента * Ответ прокси-сервера со статусом 407 * Запрос клиента с затребованными данными * Ответ прокси-сервера. при запуске via php: * Запрос клиента * Ответ прокси-сервера со статусом 407 * и тут запроса от клиента уже не поступает. почему?
непонятно почему проблема возникала, но если добавить в каждый хедер такое поле, все работает нормально const opa = 'Proxy-Authorization: Basic '; ... jopa := opa+base64Encode(login+':'+pass); HttpAddRequestHeaders(URL, PChar(jopa), Length(jopa), HTTP_ADDREQ_FLAG_ADD);
У меня такая проблема возникала, когда я ставил пароль на каталог. Причём для запросов GET отправка заголовка с логином и паролем работала нормально. Но при использовании POST сервер никаких данных не возвращал назад. Пришлось убрать пароль с каталога, тем более, что basic-защита некудышная (логин и пароль передаются в открытом виде). Еще немного не по теме, но может пригодиться. У некоторых клиентов, которые пользовались моей программой вылетала ошибка 417. Причем тоже на POST-запросах. Происходило это до тех пор, пока я не убрал из заголовка Expect100Continue.