返回信息流#include <stdio.h>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{ //If it works,it is written by masterz,otherwise I don't know who write it.
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="maps.google.com";
////////////////////////////////////////////////////////////////////////////
char req[1024] = {0};
char URL[1024] = {0};
sprintf(URL,"http://www.google.com/glm/mmap");
char *Content = "application/x-www-form-urlencoded";
char conf[1024] = {0};
sprintf(conf,"{"
"\"version\": \"1.1.0\","
"\"host\": \"maps.google.com\","
"\"access_token\": \"2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe\","
"\"home_mobile_country_code\": 460,"
"\"home_mobile_network_code\":0,"
"\"address_language\": \"zh_CN\","
"\"radio_type\": \"gsm\","
"\"request_address\": true,"
"\"cell_towers\":["
"{"
"\"cell_id\":4698,"
"\"location_area_code\":4473,"
"\"mobile_country_code\":460,"
"\"mobile_network_code\":0,"
"\"signal_strength\": -50,"
"\"timing_advance\":5555"
"}"
"]"
"}"
);
sprintf(req, "POST %s HTTP/1.0\r\nAccept: */*\r\nUser-Agent:Profile/MIDP-2.0 Configuration/CLDC-1.1\r\nContent-Length:%d\r\nContent-Type: %s\r\n%s",URL,strlen(conf),Content,conf);
//sprintf(req, "POST %s HTTP/1.0\r\nContent-Length:%d\r\nContent-Type: %s\r\n%s",URL,strlen(conf),Content,conf);
printf("%s\n",req);
////////////////////////////////////////////////////////////////////////////
/*
char* req="POST /loc/json 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: 350\r\n\r\n"
//发送的内容
*/
if(WSAStartup(winsock_version,&wsadata))
printf("can't initial socket");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET; // Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,dest,1000,0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
}
程序可以跑通,但是请求后没有响应了,请大牛帮忙看看!!
这是一条镜像帖。来源:北邮人论坛 / www-technology / #13205同步于 2011/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
用c实现http的post
motto
2011/5/6镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
sprintf(conf,"{"
"\"version\": \"1.1.0\","
"\"host\": \"maps.google.com\","
"\"access_token\": \"2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe\","
"\"home_mobile_country_code\": 460,"
"\"home_mobile_network_code\":0,"
"\"address_language\": \"zh_CN\","
"\"radio_type\": \"gsm\","
"\"request_address\": true,"
"\"cell_towers\":["
"{"
"\"cell_id\":4698,"
"\"location_area_code\":4473,"
"\"mobile_country_code\":460,"
"\"mobile_network_code\":0,"
"\"signal_strength\": -50,"
"\"timing_advance\":5555"
"}"
"]"
"}"
);
这是json的格式,我也不晓得直接当成post的内容来发有没有问题,这个程序是通过区域码和基站cellid查经纬度的。利用google的API
#include <stdio.h>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{ //If it works,it is written by masterz,otherwise I don't know who write it.
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="maps.google.com";
////////////////////////////////////////////////////////////////////////////
char req[1024] = {0};
char URL[1024] = {0};
sprintf(URL,"/loc/json");
char *Content = "application/x-www-form-urlencoded";
char conf[1024] = {0};
sprintf(conf,"{"
"\"version\": \"1.1.0\","
//"\"encoding\":\"utf-8\""
"\"host\": \"maps.google.com\","
"\"access_token\": \"2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe\","
"\"home_mobile_country_code\": 460,"
"\"home_mobile_network_code\":0,"
"\"address_language\": \"zh-Hans\","
"\"radio_type\": \"gsm\","
"\"request_address\": true,"
"\"cell_towers\":["
"{"
"\"cell_id\":4698,"
"\"location_area_code\":4473,"
"\"mobile_country_code\":460,"
"\"mobile_network_code\":0,"
"\"signal_strength\": -50,"
"\"timing_advance\":5555"
"}"
"]"
"}"
);
sprintf(req, "POST %s HTTP/1.0\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0\r\nAccept-Language: zh-cn\r\nContent-Type: %s\r\nContent-Length:%d\r\n\r\n%s",URL,Content,strlen(conf),conf);
//sprintf(req, "POST %s HTTP/1.0\r\nContent-Length:%d\r\nContent-Type: %s\r\n%s",URL,strlen(conf),Content,conf);
printf("%s\n",req);
if(WSAStartup(winsock_version,&wsadata))
printf("can't initial socket");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET; // Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
char dest[2000];
//nRet=1;
nRet=recv(hsocket,dest,1000,0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s\n\n",dest);
}