cURL / Mailing Lists / curl-library / Single Mail

curl-library

Ntlm proxy and Http 407 error

From: Valerio Borsò <vborso_at_gmail.com>
Date: Wed, 18 Feb 2015 17:00:49 +0100

Hi All!!

I'm developing a small application. For testing purpouse i'm tryng to
"ping" google using libcurl while behind an ntlm proxy. This is my c++ code:

CURLcode testConnection(void)

{

    CURL *curl;

    CURLcode res = CURLE_OK;

    res = curl_global_init(CURL_GLOBAL_ALL);

    curl = curl_easy_init();

    if (curl)

    {

        cout << "Url: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_URL, "http://www.google.com")) << "\n";

        cout << "T-out: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_CONNECTTIMEOUT, 3)) << "\n";

        cout << "No_body: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_NOBODY, true)) << "\n";

        cout << "Proxy Url: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_PROXY, "proxyrm.wind.root.it")) << "\n";

        cout << "Proxy Port: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_PROXYPORT, 8080)) << "\n";

        cout << "Ntml: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_HTTPAUTH, CURLAUTH_NTLM)) << "\n";

        cout << "Verbose: " << curl_easy_strerror(curl_easy_setopt(curl,
CURLOPT_VERBOSE, true)) << "\n";

        res = curl_easy_perform(curl);

        curl_easy_cleanup(curl);

    }

    else

        res = CURLE_FAILED_INIT;

    curl_global_cleanup();

    return res;

}

All this went good, since the verbose output is the following.

Url: No error

T-out: No error

No_body: No error

Proxy Url: No error

Proxy Port: No error

Ntml: No error

Verbose: No error

* About to connect() to proxy proxyrm.wind.root.it port 8080 (#0)

* Trying 10.8.54.115...

* Connected to proxyrm.wind.root.it (10.8.54.115) port 8080 (#0)

> HEAD http://www.google.com HTTP/1.1

Host: www.google.com

Accept: */*

Proxy-Connection: Keep-Alive

< HTTP/1.1 407 Proxy Authentication Required

< Proxy-Authenticate: NTLM

< Proxy-Authenticate: BASIC realm="windroot"

< Cache-Control: no-cache

< Pragma: no-cache

< Content-Type: text/html; charset=utf-8

* HTTP/1.1 proxy connection set close!

< Proxy-Connection: close

< Set-Cookie: BCSI-CS-602d36a7505d346e=2; Path=/

< Connection: close

< Content-Length: 989

<

* Closing connection 0

Curl Final: No error

But, if i try to ping https://google.com using this line

cout << "Url: " << curl_easy_strerror(curl_easy_setopt(curl, CURLOPT_URL, "
http://www.google.com")) << "\n";

The result become this

Url: No error

T-out: No error

No_body: No error

Proxy Url: No error

Proxy Port: No error

Ntml: No error

Ntml: No error

Ntml: No error

Verbose: No error

* About to connect() to proxy proxyrm.wind.root.it port 8080 (#0

* Trying 10.8.54.115...

* Connected to proxyrm.wind.root.it (10.8.54.115) port 8080 (#0)

* Establish HTTP proxy tunnel to www.google.com:443

> CONNECT www.google.com:443 HTTP/1.1

Host: www.google.com:443

Proxy-Connection: Keep-Alive

< HTTP/1.1 407 Proxy Authentication Required

< Proxy-Authenticate: NTLM

< Proxy-Authenticate: BASIC realm="windroot"

< Cache-Control: no-cache

< Pragma: no-cache

< Content-Type: text/html; charset=utf-8

< Proxy-Connection: close

< Set-Cookie: BCSI-CS-602d36a7505d346e=2; Path=/

< Connection: close

< Content-Length: 1135

<

* Ignore 1135 bytes of response-body

* Received HTTP code 407 from proxy after CONNECT

* Connection #0 to host proxyrm.wind.root.it left intact

Curl Final: Failure when receiving data from the peer

Using curl in command line allow me to ping https (i have to specify the -k
argument) but i don't know if this is really relevant.

Someone can help me to figure out what's happening? And how to avoid that?

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2015-02-18