使用 C++ 套接字发出 HTTP GET 请求时出现 301 错误
Getting 301 Error when making HTTP GET Requests using C++ sockets
我正在尝试从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 客户端库都有一个选项来自动处理这个问题。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 为什么我收到来自谷歌的错误请求?
- 获取"rw_ssid"中成员"长度"的错误请求,该成员属于非类类型"char*"
- 从谷歌日历API获取错误请求
- 错误:请求成员 .. 是非类类型"char"
- C++ Schannel POST 400 错误代码错误请求
- Winsock 400 错误请求,开放性
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- 错误:请求从“ void”转换为“ QString”的非量表类型
- 错误请求,您的浏览器发送了此服务器无法理解的请求 - Qt Websocket 服务器
- 如何在beast::websocket中读取错误请求的标头
- 使用 winsock 库发送 GET HTTP 请求时出现 400 错误请求错误
- Waht [错误] 请求 memebr 'area' 在非类类型 'float' 中'r'是什么意思?
- C++:成员'的错误请求;Foo'在'f',其是非类类型'Foo*'
- 错误:请求“y”中的成员“x”,该成员属于非类类型“class**”
- 非类类型 'char' 的成员 getName 的错误请求
- HTTP 400 错误请求
- 错误:请求非类类型的成员
- 成员"查找"的错误请求