使用C++ sockets进行HTTP GET请求时出现301错误

我正在尝试从C++程序中进行GET请求,但每次都会收到301 Moved Permanently错误。我正在使用一个使用sockets的API,无法弄清为什么这个错误总是出现。

以下是正在进行的请求:

GET https://www.quandl.com/api/v3/datasets/EOD/AAPL.csv?sort_order=asc&auth_token=YZffVEztoepdzHNAMexz HTTP/1.1
Host: www.quandl.com
Connection: close

以下是请求的响应:

HTTP/1.1 301 Moved Permanently
Date: Sun, 12 Nov 2017 03:58:41 GMT
Content-Type: text/html
Content-Length: 182
Connection: close
Set-Cookie: __cfduid=d51b8e22f5239ed65b480d8ec37cad8251510459121; expires=Mon, 12-Nov-18 03:58:41 GMT; path=/; domain=.quandl.com; HttpOnly
Location: https://www.quandl.com/api/v3/datasets/EOD/AAPL.csv?sort_order=asc&auth_token=YZffVEztoepdzHNAMexz
Server: cloudflare-nginx
CF-RAY: 3bc6930581840ed9-EWR

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>openresty</center>
</body>
</html>

我认为这可能与Set-cookie中的Http-only部分有关,但是不确定并且不知道如何摆脱它。我认为响应后Location中的url是页面已经"移动到"的地方,但它与我请求的完全相同,所以不理解为什么我收到了错误。

点赞
用户3081018
用户3081018
GET https://www.quandl.com/api/v3/datasets/EOD/AAPL.csv?sort_order=asc&auth_token=YZffVEztoepdzHNAMexz HTTP/1.1
Host: www.quandl.com
Connection: close

这是不合法的 https:// 资源请求。相反,你需要创建一个TLS连接到服务器(而不仅仅是一个TCP连接),并仅发送路径请求而不是完整的URL:

GET /api/v3/datasets/EOD/AAPL.csv?sort_order=asc&auth_token=YZffVEztoepdzHNAMexz HTTP/1.1
Host: www.quandl.com
Connection: close
2017-11-12 07:28:55
用户8809003
用户8809003

301 并不是一个错误,它表示资源已经更换了 URL。

当你获得这个有效的响应代码后,你可以发出另一个请求到响应中指定的 Location URL。

要小心限制跟随重定向的次数,因为你可能会陷入一个无限循环。许多 HTTP 客户端库都有一个选项,可以自动处理这个问题。

2017-11-12 07:46:19