首页
社区
课程
招聘
[求助]为什么c++ socket get请求返回HTTP/1.1 302 Moved
发表于: 2016-8-7 23:31 8029

[求助]为什么c++ socket get请求返回HTTP/1.1 302 Moved

2016-8-7 23:31
8029
自己写了一个get 请求函数

函数如下:

int get(const char* host, const char* referer, const char* api, const char* parameters)
{
	WSADATA WsaData;
	WSAStartup(0x0101, &WsaData);

	//初始化socket
	struct hostent* host_addr = gethostbyname(host);
	if (host_addr == NULL)
	{
		return -103;
	}

	sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons((unsigned short)80);
	sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list);

	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == -1)
	{
		return -100;
	}

	//建立连接
	if (connect(sock, (const struct sockaddr *)&sin, sizeof(sockaddr_in)) == -1)
	{
		return -101;
	}

	//初始化发送信息
	char zj_send_str[2048] = { 0 };
	char zj_content_referer[100];
	//头信息

	strcat_s(zj_send_str, "GET ");
	strcat_s(zj_send_str, api);
	strcat_s(zj_send_str, " HTTP/1.1\r\n");
	strcat_s(zj_send_str, "Host: ");
	strcat_s(zj_send_str, host);
	strcat_s(zj_send_str, "\r\n");
	sprintf_s(zj_content_referer, "Referer: %s\r\n", referer);
	strcat_s(zj_send_str, zj_content_referer);

	strcat_s(zj_send_str, "Connection: keep-alive\r\n");
	strcat_s(zj_send_str, "Accept-Encoding: gzip, deflate\r\n");
	strcat_s(zj_send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
	strcat_s(zj_send_str, "Accept-Language: zh-cn\r\n");
	//内容信息
	strcat_s(zj_send_str, "\r\n");
	strcat_s(zj_send_str, parameters);
 	strcat_s(zj_send_str, "\r\n");
	strcat_s(zj_send_str, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n");
	strcat_s(zj_send_str, "Connection: keep-alive\r\n");
	strcat_s(zj_send_str, "Cache-Control: max-age=0\r\n");
	strcat_s(zj_send_str, "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 

Safari/601.1\r\n");


	if (send(sock, zj_send_str, strlen(zj_send_str), 0) == -1)
	{
		return -101;
	}


	//获取返回信息
	memset(recv_str, 0, RECE_DATA_SIZE);

	int sum = recv(sock, recv_str, RECE_DATA_SIZE, 0);

	if (sum == -1)
	{
		return -101;
	}


	WSACleanup();

	return 0;
}


调用如下:

ret = get("qianxiaoka.com", "a24K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4q4A6j5h3&6^5K9h3q4G2K9$3q4Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2Z5N6r3#2D9", "/quicktask/index.html","PHPSESSID=070htvaq285342e37rcsuh5du5; qxk_activecode=15636; 

qxk_idfa=09C0CC60-50ED-470F-8362-931AFE4D5B36");


返回数据是:

HTTP/1.1 302  Moved

正常情况应该返回:

HTTP/1.1 200 OK

请问大家这个问题出在哪里???

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 31
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
wireshark 抓正常访问网址的数据包和通过程序访问包的区别,看看有什么问题?
2016-8-8 07:54
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
返回的就是302,重定向到/qxk/index/index.html
你以为的200是跳转过的结果
2016-8-8 08:19
0
雪    币: 288
活跃值: (212)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
楼主,你是科锐的么?
2016-8-8 11:20
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
正常情况不会出现重定位的,而是直接返回成功数据
2016-8-8 12:29
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
正常情况不会出现重定位的,而是直接返回成功数据
2016-8-8 12:31
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
就是根据抓包的数据,然后写的。。。它的能够返回200成功,我的返回302重定向
2016-8-8 12:34
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8

你看确实重定向了
以及你的HTTP头结尾少了空行
上传的附件:
2016-8-9 08:53
0
雪    币: 5299
活跃值: (5340)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你的封包还差一个换行你不知道么???

最后继续加一个  "\r\n"  就可以了
2016-8-9 09:04
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
10
这个很简单, 你是 GET qianxiaoka.com,而 Referer 请求头是 552K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4q4A6j5h3&6^5K9h3q4G2K9$3q4Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2Z5N6r3#2D9i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1#2i4@1t1H3i4@1t1I4i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1@1i4@1u0p5i4@1p5H3i4@1f1@1i4@1u0n7i4K6S2q4 511K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4q4A6j5h3&6^5K9h3q4G2K9$3q4Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2Z5N6r3#2D9 这个 URL 访问 9fbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4q4A6j5h3&6^5K9h3q4G2K9$3q4Q4x3X3g2U0L8$3@1`. 这个 URL,你觉得这样合乎逻辑么?
应该为 referer 传入 NULL,并且确保站点的根路径下,有个默认页面,即df9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4q4A6j5h3&6^5K9h3q4G2K9$3q4Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6h3S2@1L8h3H3`. ,如果没有,视 web 服务器所配置的行为,可能会跳转到其他路径下的页面。
另外,在用户代理请求头后面加上一个额外的回车换行(\r\n)试试
2016-8-9 09:24
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢亲的回答,问题就出在这里
2016-8-9 10:57
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢亲的回答,问题就出在这里
2016-8-9 10:59
0
游客
登录 | 注册 方可回帖
返回