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

时间:2017-11-12 04:16:15

标签: c++ sockets http redirect http-status-code-301

我正在尝试从C ++程序发出GET请求,并且每次收到301 Moved Permanently错误。我正在使用一个使用套接字的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的部分有关,但我不是100%肯定,并且不知道如何摆脱它。我认为位置后响应中的网址是页面移动到的位置,但是它与我请求的网页完全相同,所以我不明白为什么我会得到错误。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

301不是错误,这意味着资源已更改了URL。

获得此有效响应代码后,您可以向响应中指定的位置URL发出另一个请求。

小心限制您遵循重定向的次数,因为您可能会遇到无限循环。许多HTTP客户端库都有一个自动处理它的选项。