通过代理发出请求时出现HTTP错误
HTTP errors while making a request through a proxy
我想知道如何使用Socket通过代理发出HTTP请求。
我在互联网上查看文档,很多人说要做到这一点,我必须连接到代理服务器并发送一个带有以下标题的数据包:
send(Socket, "CONNECT http://icanhazip.com:80 HTTP/1.0rnrn", strlen("CONNECT http://icanhazip.com:80 HTTP/1.0rnrn"), 0);
该网站返回当前的公共IP,但不幸的是,我尝试的每个代理服务器都返回了错误,而不是网页的HTML源代码。
这是我的实际代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
try {
int Socket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in SockAddr;
memset(&SockAddr, 0, sizeof(SockAddr));
SockAddr.sin_port = htons(80);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = inet_addr("198.169.246.30");
int iResult = connect(Socket, (struct sockaddr *)& SockAddr, sizeof(SockAddr));
if (iResult != 0) {
std::cout << "I can't connect :(.";
getchar();
return 1;
}
std::cout << "Connected.n";
send(Socket, "CONNECT http://icanhazip.com:80 HTTP/1.1rnrn", strlen("CONNECT http://icanhazip.com:80 HTTP/1.1rnrn"), 0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0) {
int i = 0;
while (buffer[i] >= 32 || buffer[i] == 'n' || buffer[i] == 'r') {
std::cout << buffer[i];
i += 1;
}
}
iResult = close(Socket);
}
catch (...) {
}
return 0;
}
我能做些什么来修复它?或者,我应该研究其他什么解决方案?
中国古代谚语说,"在编写代码之前,最好先阅读规范";
https://www.rfc-editor.org/rfc/rfc7230
通过文档中的以下链接:
发送CONNECT请求的客户端必须发送请求目标([RFC7230]第5.3节);即请求目标仅由隧道的主机名和端口号组成目的地,用冒号分隔。例如,
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
来源:https://www.rfc-editor.org/rfc/rfc7231#section-4.3.6
相关文章:
- 带有边界获取错误的 HTTP POST
- 为什么这C++ASIO,当执行HTTP / SSL请求时,BEAST服务器会进入错误状态
- 使用 C++ 套接字发出 HTTP GET 请求时出现 301 错误
- VS2015 中卡萨布兰卡的链接器错误,同时尝试构建一个简单的 HTTP 侦听器
- 如何修复 c++ 提升 http 示例中的"找不到架构x86_64符号"错误
- 使用 winsock 库发送 GET HTTP 请求时出现 400 错误请求错误
- 我一直在使用C 的HTTP/1.0 400 JSON RPC错误
- c++ Http 请求 SSL 错误
- 使用libcurl和ntml时出现错误http 407
- PHP7 和 IIS8 HTTP 错误 500.0 - FastCGI 进程意外退出
- HTTP 400 错误请求
- FCGI 进程在 HTTP 502 错误后被终止
- 通过 tcp 和浏览器发送带有 HTTP 协议的 html 文件会显示错误
- 错误C2668从站点对重载函数代码的调用不明确http://h264bitstream.sourceforge.net/
- 使用HTTP上载文件.获取错误:-HttpSendReuest 12005
- 通过代理发出请求时出现HTTP错误
- Qt http在谷歌上的错误请求
- HTTP/1.1 401使用GSOAP调用EWS时出现未经授权的错误
- 发送http post消息错误报告的安全方式
- 链接器错误LNK2019在boost asio http客户端代码