⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http.c

📁 一个简单的基于WINSOCK的HTTP请求发送实例 水平有限 请大家指教
💻 C
字号:
#include <winsock.h>
#include <stdio.h>
#include <string.h>

#pragma comment(lib, "ws2_32.lib")

#define PORT 80
#define LOCAL_PORT 19850

//提交的HTTP请求,具体格式和用法可参照RFC
char * send_buf="POST /webroot/news/?section=103&page=1&id=1670&specialid=0 HTTP/1.0\r\n"
"From: local\r\n"
"User-Agent: post_test/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 20\r\n\r\n"
"type=12345&name=aaaa";
char receive_buf[1024];

void main(void)
{
	WSADATA wsaData;//**************
	int Ret ;//***************

	SOCKET s;
	char delay;
	struct sockaddr_in server;
	struct sockaddr_in local_addr;
	server.sin_family= AF_INET;
    server.sin_addr.S_un.S_un_b.s_b1=218; //WEB服务器的IP地址,可以在CMD下用PING命令得到
	server.sin_addr.S_un.S_un_b.s_b2=30;//218.30.66.101为新浪的某个WEB服务器的地址
	server.sin_addr.S_un.S_un_b.s_b3=66;
	server.sin_addr.S_un.S_un_b.s_b4=101;
    server.sin_port = htons(PORT); 
	local_addr.sin_family= AF_INET;
    local_addr.sin_addr.S_un.S_un_b.s_b1=192; //这里把IP改成本机的IP即可
	local_addr.sin_addr.S_un.S_un_b.s_b2=168;
	local_addr.sin_addr.S_un.S_un_b.s_b3=1;
	local_addr.sin_addr.S_un.S_un_b.s_b4=100;
    local_addr.sin_port = htons(LOCAL_PORT);

	if ((Ret = WSAStartup(MAKEWORD(1,1), &wsaData)) != 0)//************
	{//************
		printf("WSAStartup failed with error %d\n", Ret);//************
    	return;//***************
	}//****************

    s=socket(AF_INET,SOCK_STREAM,0);
	if(bind(s,(struct sockaddr *)&local_addr,sizeof(local_addr))==SOCKET_ERROR)
	  printf("Binding socket failed!Error:%d\n",WSAGetLastError());
	else printf("Binding %d.%d.%d.%d:%d...\n",local_addr.sin_addr.S_un.S_un_b.s_b1,local_addr.sin_addr.S_un.S_un_b.s_b2,local_addr.sin_addr.S_un.S_un_b.s_b3,local_addr.sin_addr.S_un.S_un_b.s_b4,LOCAL_PORT);
	if(connect(s,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR)
	  printf("Connecting socket failed!Error:%d\n",WSAGetLastError());
	else printf("Connecting %d.%d.%d.%d:%d...\n",server.sin_addr.S_un.S_un_b.s_b1,server.sin_addr.S_un.S_un_b.s_b2,server.sin_addr.S_un.S_un_b.s_b3,server.sin_addr.S_un.S_un_b.s_b4,PORT);
    if(send(s,send_buf,strlen(send_buf),0)==SOCKET_ERROR)
	  printf("Sending socket failed!Error:%d\n",WSAGetLastError());
	else printf("Sended Message:%s\n",send_buf);
	if(recv(s,receive_buf,1024,0)==SOCKET_ERROR)
	  printf("Receiving socket failed!Error:%d\n",WSAGetLastError());
	else printf("Received Message:%s\n",receive_buf);
	closesocket(s);


	if (WSACleanup() == SOCKET_ERROR)//***************
	{//****************
		printf("WSACleanup failed with error %d\n", WSAGetLastError());//**********
	}//**************
	delay=getchar();
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -