curl: catching exception on connect.

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Dec 1 11:36:26 PST 2014


On 12/01/2014 10:25 AM, Suliman wrote:

 > why:
 >      string link = "dlang.org";
 >      writeln(connect(link));
 >
 > cause crash:

(To be pedantic: An unhandled exception is not a crash. ;) )

 > 
std.net.curl.CurlException at C:\DMD\dmd2\windows\bin\..\..\src\phobos\std\net\curl 

 >
 > .d(779): HTTP request returned status code 400

Indeed, the following program does behave in the same way:

import std.stdio;
import std.net.curl;

pragma(lib, "curl");

void main()
{
     string link = "dlang.org";
     writeln(connect(link));
}

I have very little experience with the HTTP protocol and its methods but 
I've just learnt that connect() is for HTTP's CONNECT method, which is 
most likely supported on port 443.

So, I tried

     string link = "dlang.org:443";

and got

std.net.curl.CurlException at std/net/curl.d(3684): Server returned nothing 
(no headers, no data) on handle 198F860

So, that's an improvement I guess. (It was the same result at 
"google.com:443") Then I tried HTTPS explicitly:

     string link = "https://dlang.org:443";

Now the error message is more promising:

std.net.curl.CurlException at std/net/curl.d(3684): Peer certificate cannot 
be authenticated with known CA certificates on handle 1653860

My guess is that you have to use HTTPS for CONNECT and that you have to 
have credentials for it. (?)

Ali



More information about the Digitalmars-d-learn mailing list