当前位置:首页 » 编程语言 » c语言模拟http请求
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言模拟http请求

发布时间: 2022-01-12 13:55:50

c语言实现HTTP协议

要会C中的TCP客户端操作
C不会,不清楚,似乎是用Socket?

然后就是要找点教程学HTTP了,比如:
http://sites.google.com/site/xierch/text/http

❷ c语言怎么实现http 请求头发送

1。建立到服务器的TCP连接
2。向服务器发送GET或者POST报文,报文格式请参考HTTP协议
3。接收服务器返回的报文

❸ C语言建立TCP连接后,怎么发送HTTP的GET请求

send发送请求串 回车 再回车。 一行结束后 换另一个语句 最后要有一个空行
GET ***** 回车
回车

❹ C#中C/S如何模拟HTTP的GET协议

模拟HTTP客户端的GET协议

usingSystem.Net;

WebRequestrequest=WebRequest.Create("http://..com/question/135065331971221885.html?push=category&entry=qb_home_category");
request.Method="GET"
WebResponseresponse=request.GetResponse();

注意url中“……?push=category&entry=qb_home_category”从问号?开始的是Get 请求的参数。各个参数直接用&分隔。

❺ 如何用c语言实现http服务器

//服务端简易代码如下:
#include<stdio.h>
#include<stdlib.h>

#include<err.h>
#include<event.h>
#include<evhttp.h>

voidhttp_handle(structevhttp_request*req,void*arg);/*HTTPRequestHandle*/

intmain(){
structevhttp*httpd;
event_init();
httpd=evhttp_start("0.0.0.0",2345);
if(httpd==NULL){
fprintf(stderr,"Error:Unabletolistenon%s:%d ");
exit(1);
}
evhttp_set_timeout(httpd,2000);
evhttp_set_gencb(httpd,http_handle,NULL);
event_dispatch();
evhttp_free(httpd);

return0;
}

voidhttp_handle(structevhttp_request*req,void*arg){
structevbuffer*buf;
buf=evbuffer_new();

/*Responsetheclient*/
evhttp_send_reply(req,HTTP_OK,"OK",buf);

//evbuffer_add_printf(buf,"%s","HTTPSQS_AUTH_FAILED");

/*Releasethememory*/
evbuffer_free(buf);
fprintf(stderr,"Send ");
}

编译:编译时把libevent的类库中的.so文件和.h文件连接进来。

❻ c语言实现 请求网址

首先, 127.0.0.1是本机地址

❼ 如何用C/C++模拟post提交数据,获得http相应。

http协议有不少内容。post是把数据写到协议头的后面。
比如要传输“abc”
首先是头部分,后面是数据部分
POST /aaa.asp HTTP1.1
......
\r\n\r\n
abc
类型这样的数据用tcp传就ok

❽ c语言 构造http请求

GET %s/ HTTP/1.0\r\n
%s 后面的/没有的

❾ 如何通过 c/c++ 实现http请求

示例程序,转载自CNBLOG,做了针对C语言编译器的适应性修正:

#include<stdio.h>
#include<winsock2.h>

#pragmacomment(lib,"ws2_32.lib")/*WinSock使用的库函数*/

/*定义常量*/
#defineHTTP_DEF_PORT80/*连接的缺省端口*/
#defineHTTP_BUF_SIZE1024/*缓冲区的大小*/
#defineHTTP_HOST_LEN256/*主机名长度*/

char*http_req_hdr_tmpl="GET%sHTTP/1.1 "
"Accept:image/gif,image/jpeg,*/* Accept-Language:zh-cn "
"Accept-Encoding:gzip,deflate Host:%s:%d "
"User-Agent:Huiyong'sBrowser<0.1> Connection:Keep-Alive ";


/**************************************************************************
*
*函数功能:解析命令行参数,分别得到主机名,端口号和文件名.命令行格式:
*[http://www..com:8080/index.html]
*
*参数说明:[IN]buf,字符串指针数组;
*[OUT]host,保存主机;
*[OUT]port,端口;
*[OUT]file_name,文件名;
*
*返回值:void.
*
**************************************************************************/
voidhttp_parse_request_url(constchar*buf,char*host,
unsignedshort*port,char*file_name)
{
intlength=0;
charport_buf[8];
char*buf_end=(char*)(buf+strlen(buf));
char*begin,*host_end,*colon,*file;

/*查找主机的开始位置*/

begin=(char*)(strstr(buf,"//"));
begin=(begin?begin+2:(char*)(buf));

colon=strchr(begin,':');
host_end=strchr(begin,'/');

if(host_end==NULL)
{
host_end=buf_end;
}
else
{/*得到文件名*/
file=strrchr(host_end,'/');
if(file&&(file+1)!=buf_end)
strcpy(file_name,file+1);
}
if(colon)/*得到端口号*/
{
colon++;

length=host_end-colon;
memcpy(port_buf,colon,length);
port_buf[length]=0;
*port=atoi(port_buf);

host_end=colon-1;
}

/*得到主机信息*/
length=host_end-begin;
memcpy(host,begin,length);
host[length]=0;
}


intmain(intargc,char**argv)
{
WSADATAwsa_data;
SOCKEThttp_sock=0;/*socket句柄*/
structsockaddr_inserv_addr;/*服务器地址*/
structhostent*host_ent;

intresult=0,send_len;
chardata_buf[HTTP_BUF_SIZE];
charhost[HTTP_HOST_LEN]="127.0.0.1";
unsignedshortport=HTTP_DEF_PORT;
unsignedlongaddr;
charfile_name[HTTP_HOST_LEN]="index.html";
charfile_nameforsave[HTTP_HOST_LEN]="index1.html";
FILE*file_web;

if(argc!=2)
{
printf("[Web]input:%shttp://www.test.com[:8080]/index.html",argv[0]);
return-1;
}

http_parse_request_url(argv[1],host,&port,file_name);
WSAStartup(MAKEWORD(2,0),&wsa_data);/*初始化WinSock资源*/

addr=inet_addr(host);
if(addr==INADDR_NONE)
{
host_ent=gethostbyname(host);
if(!host_ent)
{
printf("[Web]invalidhost ");
return-1;
}

memcpy(&addr,host_ent->h_addr_list[0],host_ent->h_length);
}

/*服务器地址*/
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(port);
serv_addr.sin_addr.s_addr=addr;

http_sock=socket(AF_INET,SOCK_STREAM,0);/*创建socket*/
result=connect(http_sock,(structsockaddr*)&serv_addr,sizeof(serv_addr));
if(result==SOCKET_ERROR)/*连接失败*/
{
closesocket(http_sock);
printf("[Web]failtoconnect,error=%d ",WSAGetLastError());
return-1;
}

/*发送HTTP请求*/
send_len=sprintf(data_buf,http_req_hdr_tmpl,argv[1],host,port);
result=send(http_sock,data_buf,send_len,0);
if(result==SOCKET_ERROR)/*发送失败*/
{
printf("[Web]failtosend,error=%d ",WSAGetLastError());
return-1;
}

file_web=fopen(file_nameforsave,"a+");

do/*接收响应并保存到文件中*/
{
result=recv(http_sock,data_buf,HTTP_BUF_SIZE,0);
if(result>0)
{
fwrite(data_buf,1,result,file_web);

/*在屏幕上输出*/
data_buf[result]=0;
printf("%s",data_buf);
}
}while(result>0);

fclose(file_web);
closesocket(http_sock);
WSACleanup();

return0;
}

❿ 如何使用c语言解析httppost请求

这个和具体的网页有关系的,你可以用HttpWatch之类的抓包工具分析一个网页的请求和返回。 然后就可以自己模仿相关的请求访问该网页了。