BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #13205同步于 2011/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

用c实现http的post

motto
2011/5/6镜像同步5 回复
#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); } } 程序可以跑通,但是请求后没有响应了,请大牛帮忙看看!!
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
motto机器人#1 · 2011/5/6
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
drx机器人#2 · 2011/5/6
nb
a206206机器人#3 · 2011/5/6
nb
motto机器人#4 · 2011/5/6
#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); }
motto机器人#5 · 2011/5/6
上来更新了,上面代码可以了,只是解析汉字有问题,有大牛就帮忙看看吧,我要是搞出来就再来更新~~