C语言或者C++如何调用一个http接口并得到返回结果?

Python012

C语言或者C++如何调用一个http接口并得到返回结果?,第1张

用jni

首先

java

public

class

testhello

{

static

{

system.loadlibrary("testhellos")

}

public

static

native

void

hello(string

msg)

public

native

void

getsysid()

public

native

string

getkeycode(string

sysid)

public

native

boolean

testkeycode(string

sysid,

string

keycode)

public

static

void

main(string[]

args)

{

//

hello("hello,kimm!")

testhello

t=

new

testhello()

t.getsysid()

}

}

用javac

testhello.java,

java

testhello,javah

-classpath

.

-verbose

testhello

。将生产的头文件用到c++

中的

heardfileds

中。然后在

sources

files

中实现

heardfieds

方法。实现的方法,其实就是你要调用c++的方法、

#include <stdio.h>

char * xxx(char *all, char *target){

int i,j,k

static char t[80]

j = strlen(all)

k = strlen(target)

printf("j=%d k=%d\n",j,k)

for (i=0i<j-k-1i++){

if (strncmp(&all[i],target,k)==0) { sscanf( &all[i+k+1],"%s",t)

printf("t = %s\n",t)

break}

}

return t

}

main(){

char all[]="GET / HTTP/1.1 Accept-Language: zh-cn,zhq=0.8,en-usq=0.5,enq=0.3 Sec-WebSocket-Key: mHCYmHhGCn44x+g6quuzYg== Cache-Control: no-cache"

char txt[]="Sec-WebSocket-Key:"

char trs[80]

printf("%s",xxx(all,txt))

}

---------

注意 char all[]=" ...." ; 写在1行,或通过文件读入。

char txt[]="Sec-WebSocket-Key:" 字符串里的冒号不要漏掉,

若不写冒号,计算sscanf位置 时要再加1。sscanf( &all[i+k+2],"%s",t)

已知url ,host, port

int s, size

struct sockaddr_in sin

struct hostent* phe

char cmd[256]

char msg_hdr[1000]

char* p

//准备http中GET 方法的请求。

sprintf(cmd,"GET %s\r\nHTTP/1.1\r\nHost:%s", url, host)

//创建socket

if((s=socket(PF_INET,SOCK_STREAM,0))<0)

return -1

//取得远程主机的IP地址,失败函数返回-1

if((phe = gethostbyname(host)) == NULL)

return -1

memset(&sin,0,sizeof(sin))

memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr))

sin.sin_family=AF_INET

sin.sin_port=htons(pms->port)

//跟远程机器建立连接,失败函数返回-1

if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)

return -1

//发送GET请求

if(write(s,cmd,strlen(cmd))<0)

return 0

//从链接描述符(连接管道)中读取传送过来的数据

if(read(s, msg_hdr, 300)<0)

error

close(s)

//读到该文件的大小

if((p=strstr(msg_hdr,"Content-Length"))||(p=strstr(msg_hdr,"Content-length:")))

p+=16

else

error

//返回大小

size = atoi(p)

sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nConnection: close\r\nRange: bytes0-%d\r\n\r\n", url, host, size)

//创建套接口

if((s=socket(AF_INET,SOCK_STREAM,0))<0)

return 0

//取得远程主机的IP地址,失败返回0

if((phe = gethostbyname(host)) == NULL)

return 0

memset(&sin,0,sizeof(sin))

memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr))

sin.sin_family=AF_INET

sin.sin_port=htons(port)

//建立连接

if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)

return 0

//发送读取请求

if(write(s,cmd,strlen(cmd))<0)

error

read(s, buf, BUFSIZE)..............