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

Getting 301 Error when making HTTP GET Requests using C++ sockets

本文关键字:错误 请求 HTTP C++ 套接字 使用 GET      更新时间:2023-10-16

我正在尝试从C++程序发出GET请求,每次我都收到301永久移动错误。我正在使用使用套接字的 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% 确定,也不知道如何摆脱它。我认为位置后响应中的 url 是页面"移动到"的位置,但它与我请求的完全相同,所以我不明白为什么我会收到错误。

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

301 不是错误,而是表示资源已更改 URL。

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

请注意限制跟踪重定向的次数,因为您可能会遇到无限循环。 许多 HTTP 客户端库都有一个选项来自动处理这个问题。