Autenticación proxy requerida con cURL

Me gustaría utilizar una función cURL, pero estoy detrás de un proxy, por lo que me aparece un error HTTP/1.1 407 Proxy Authentication Required

Este es el código php que uso:

 $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); 

Y no sé lo que hago mal … ¿Cómo puedo evitar este error?

Esto es lo que estoy usando principalmente:

 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; } 

Intenta implementar esto en tu función

  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 '
';print_r($array);echo '

';exit; if (!empty($result)) { return $result; } else { echo "Curl Error" . curl_error($ch); } }

solicitud de verificación enviar 200ok …

Y revise su certificado seguro si está usando …

Gracias.

Esto es lo que uso y funciona perfectamente:

 $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); 

Suponiendo que $proxy_user:$proxy_pass son los valores correctos, si está detrás de un firewall de oficina, las credenciales de autenticación que se usarán serán las de un administrador de red y no las suyas … He encontrado algo muy similar en mi entorno de trabajo y ese fue el caso para mí, ya que mis credenciales normales no tenían los privilegios necesarios. Sin embargo, la mejor manera de garantizar que este sea el caso sería asegurarse de que el código funcione en una red abierta con sus configuraciones proxy comentadas. ¡Espero que esto ayude!