Intereting Posts
извлечь первые N цифр из строки с регулярным выражением Использование usort в php для сортировки массива объектов? Как удалить теги HTML, CSS из строки? регулярное выражение, не совпадающее из-за повторной группы захвата, а не захвата повторяющейся группы Передача значений на другую php-страницу с использованием тега привязки Использование кэширования браузеров для сторонних JS SQL Query несколько AND и OR не работают Как искать значение из ввода mysqli в базе данных Запрос xpath для результата запроса xpath Задержка при заполнении данных session.upload_progress вторая сортировка с помощью php usort Laravel – комментарии Blade, обработка клинка, приводящая к сбою страницы Почему я не должен использовать функции mysql_ * в PHP? PHP Как заменить апострофы текстовой области клиентов с помощью escape-символа Пространства имен в PHP, предотвращающие использование статических функций Yii

Аутентификация прокси-сервера с помощью cURL

Я хотел бы использовать функцию cURL, но я за прокси-сервером, поэтому получаю HTTP/1.1 407 Proxy Authentication Required ошибка …

Это код php, который я использую:

 $proxy_user = 'Michiel'; $proxy_pass = 'mypassword'; $proxy_url = 'myproxyurl:port'; $proxy = true; $service_url = "https://www.myapiurltocall.com"; $service_user = 'user:password:FO'; $service_pass = 'password'; $ch = curl_init($service_url); // Set proxy if necessary if ($proxy) { curl_setopt($ch, CURLOPT_PROXY, $proxy_url); curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_user.':'.$proxy_pass); curl_setopt($ch, CURLOPT_PROXYPORT, 8080); curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); } // Set service authentication curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_USERPWD, "{$service_user}:{$service_pass}"); // HTTP headers $headers['Authorization'] = 'Basic ' . base64_encode("$proxy_user:$proxy_pass"); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_TIMEOUT, 15); //WARNING: this would prevent curl from detecting a 'man in the middle' attack curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); $data = curl_exec($ch); 

И я не знаю, что я делаю неправильно … Как я могу обойти эту ошибку?

Это то, что я использую в основном:

 function curlFile($url,$proxy_ip,$proxy_port,$loginpassw) { //$loginpassw = 'username:password'; //$proxy_ip = '192.168.1.1'; //$proxy_port = '12345'; //$url = 'http://www.domain.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port); curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP'); curl_setopt($ch, CURLOPT_PROXY, $proxy_ip); curl_setopt($ch, CURLOPT_PROXYUSERPWD, $loginpassw); $data = curl_exec($ch); curl_close($ch); return $data; } 

Попробуйте реализовать это в своей функции

  function send_string($data) { // pr($data);exit; $equi_input="Your values"; // echo $equi_input; exit; $agent = ""//Agent Setting for Netscape $url = ""; // URL to POST FORM. (Action of Form) //xml format $efx_request=strtoupper($equi_input); //echo $efx_request;exit; $post_fields = "site_id=""&service_name=""&efx_request=$efx_request"; $credentials = ; $headers = array("HTTP/1.1", "Content-Type: application/x-www-form-urlencoded", "Authorization: Basic " . $credentials ); $fh = fopen('/tmp/test.txt', 'w') or die("can't open file"); //File to write the header information of the curl request. $ch = curl_init(); // Initialize a CURL session. curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_URL, $url); // Pass URL as parameter. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_STDERR, $fh); curl_setopt($ch, CURLOPT_POST, 1); // use this option to Post a form curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); // Pass form Fields. curl_setopt($ch, CURLOPT_VERBOSE, '1'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); // grab URL and pass it to the variable. curl_close($ch); // close curl resource, and free system resources. fclose($fh); //echo '<pre>';print_r($array);echo '</pre>';exit; if (!empty($result)) { return $result; } else { echo "Curl Error" . curl_error($ch); } } 

проверить запрос отправить 200ok …

И проверьте свой безопасный сертификат, если вы используете ….

Благодарю.

Это то, что я использую, и он отлично работает:

 $proxy = "1.1.1.1:12121"; $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; $url = "http://www.google.pt/search?q=anonymous"; $credentials = "user:pass" $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,15); curl_setopt($ch, CURLOPT_HTTP_VERSION,'CURL_HTTP_VERSION_1_1' ); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_PROXYUSERPWD,$credentials); curl_setopt($ch, CURLOPT_USERAGENT,$useragent); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); $result=curl_exec ($ch); curl_close ($ch); 

Предполагая, что $proxy_user:$proxy_pass являются правильными значениями, если вы находитесь за офисным брандмауэром, то учетные данные для проверки подлинности будут использоваться сетевым администратором, а не вашим … Я столкнулся с чем-то очень похожим в своей рабочей среде и это было для меня, поскольку мои обычные полномочия не обладали необходимыми привилегиями. Лучший способ убедиться, что это так, однако, будет заключаться в том, чтобы обеспечить работу кода в открытой сети с прокомментированными настройками прокси. Надеюсь это поможет!