当前位置:首页 » 编程语言 » httpc语言实现

httpc语言实现

发布时间: 2023-02-22 07:13:39

❶ 如何通过 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语言实现的http请求中,User-Agent该填什么

User Agent表示的是客户端软件类型,也就是浏览器类型

❸ C 语言在linux下发送HTTP 请求

您好 您直接建立一个socket,把http协议的内容放在buffer中,发送到服务器就可以,在c语言中,尽量比较底层的操作,这样您可以更灵活的操作,我们一般都是这么实现的~

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

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

❺ 在LINUX下如何利用C语言实现HTTP的get和post方法

下载wget的源码看看就知道了

❻ 用纯C语言 怎样编程,解析HTTP协议。

按照HTTP协议的规定,理清楚相关功能。
然后软件模型的方式解释HTTP的运行过程,可以使用UML语言。
然后将UML语言转换成C语言即可。

❼ C语言怎么实现http下载文件功能

用c语言实现文件自动下载并且解压1.自动下载 http://abc.com/test.rar 也可以下载FTP://abc.com/test.rar2.下载完成后自动解压到本路径下相同的文件夹里面,如:test.rar就是test文件夹3.如果test文件夹已经存在并且里面有内容就直接覆盖4.软件运行的时候提示用户输入存储路径5.下载过程中显示下载进度6.一个好的编程会在适当的地方加上适当的注释以上功能我已经用wget+winrar的做成批处理可以运行了,但是希望用C语言来实现先送50分,如果实现了在加送50分,不希望吧分数留给系统

希望采纳

❽ 如何用c语言实现基于http的webservice

package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//标识Web Service的具体路径
String endpoint = "WebService服务地址";
// 创建 Service实例
Service service = new Service();
// 通过Service实例创建Call的实例
Call call = (Call) service.createCall();
//将Web Service的服务路径加入到call实例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置
// 由于需要认证,故需要设置调用的SOAP头信息。
Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("发布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//调用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "opName"));
//调用Web Service,传入参数
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}

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

去看一下《Advanced Linux Programming》这本书吧,第11章讲的就是怎么用C语言实现一Http服务器。 这里有下载地址(英文的): http://www.advancedlinuxprogramming.com/alp-folder 英文看起来不顺的话可以上网找找有没有中文版的这本书,应该叫Linux高级编程吧~~~参考资料: http://www.advancedlinuxprogramming.com/alp-folder

❿ 设计一个linux c语言,Http协议的服务器,用socket收发消息,简单点,求代码and注释。

OK
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <string.h>

int main(int argc,char *argv[])
{
int sockfd,new_socket;
int sock_value;
char buf[] = "hello! China!I Love You\n";

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 2){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[1])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&server_,SIZE);

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = INADDR_ANY;

if(bind(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("bind");
exit(1);
}

if(listen(sockfd, 12) == -1){
perror("listen");
exit(1);
}

printf("Waiting ... ...\n");

while(1){
if((new_socket = accept(sockfd,(struct sockaddr *)(&client_),&SIZE)) == -1){
perror("accept");
exit(1);
}

printf("The client IP is %s\n",inet_ntoa(client_.sin_addr));
printf("The socket is %d\n",ntohs(client_.sin_port));

if(write(new_socket,buf,strlen(buf)) == -1){
perror("write");
exit(1);
}

int my;
char mybuf[1024];

if((my = read(new_socket, mybuf,1024)) == -1){
perror("read");
exit(1);
}

mybuf[my] = '\0';
printf("#++++#++++#:%s\n",mybuf);

close(new_socket);

}

close(sockfd);

return 0;
}

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
int sockfd;
int sock_value;
char buf[1024];
char mybuf[] = "Linux\n";
int read_count;

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 3){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[2])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&client_,SIZE);
bzero(&server_,SIZE);

client_.sin_family = PF_INET;
client_.sin_port = htons(52252);
client_.sin_addr.s_addr = INADDR_ANY;

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = inet_addr(argv[1]);

if(connect(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("connect");
exit(1);
}

if((read_count = read(sockfd,buf,1024)) == -1){
perror("read");
exit(1);
}

buf[read_count] = '\0';
printf("#----#----#:%s\n",buf);

if(write(sockfd, mybuf,6) == -1){
perror("write");
exit(1);
}

close(sockfd);

exit(0);

return 0;
}

热点内容
蓝鸥php培训 发布:2024-11-08 02:56:29 浏览:652
电脑配置xp是什么意思 发布:2024-11-08 02:56:27 浏览:339
软件自带服务器地址怎么办 发布:2024-11-08 02:55:45 浏览:577
幸福密码电视剧讲述了什么 发布:2024-11-08 02:55:40 浏览:425
win7文件夹看不到文件 发布:2024-11-08 02:55:37 浏览:666
苹果安卓战力哪个高 发布:2024-11-08 02:45:04 浏览:532
安卓备份哪个系统好 发布:2024-11-08 02:35:50 浏览:736
unlinklinux 发布:2024-11-08 02:31:30 浏览:663
nginxphp编译 发布:2024-11-08 02:11:57 浏览:979
粉笔手机号注册的密码是什么 发布:2024-11-08 02:01:49 浏览:249