c linux socket http get
2014-04-04 07:32
330 查看
#include<netdb.h>
#include<netinet/in.h>
#include<sys/socket.h>
//LOG_TAG
#define LOGI(...)__android_log_print(ANDROID_LOG_INFO, "xcl",__VA_ARGS__)
#define LOGE(...)__android_log_print(ANDROID_LOG_ERROR, "xcl",__VA_ARGS__)
#define BUFFSIZE0xF000
int httpGet(char*hostname)
{
LOGI("httpGet");
LOGI(hostname);
charrequest[BUFFSIZE], text[BUFFSIZE];
charmyurl[BUFFSIZE] = {0};
char host[BUFFSIZE]= {0};
char GET[BUFFSIZE]= {0};
struct sockaddr_insin;
int sockfd;
if ((sockfd =socket (AF_INET, SOCK_STREAM, 0)) == -1) {
LOGE("httpgetcreate socket failed !");
return -100;
}
struct hostent *host_addr = gethostbyname(hostname);
if(host_addr==NULL){
LOGE("httpgetUnable to locate host");
return -103;
}
sin.sin_family =AF_INET;
sin.sin_port =htons( (unsigned short)80);
sin.sin_addr.s_addr= *((unsigned long*)host_addr->h_addr_list[0]);
if( connect(sockfd,(const struct sockaddr *)&sin, sizeof(struct sockaddr_in) ) == -1 ){
LOGE("httpgetconnect failed !");
return -101;
}
LOGI("httpGetsend");
// 向WEB服务器发送URL信息
memset(request, 0,BUFFSIZE);
strcat(request,"GET /index.html HTTP/1.1\r\n"); //请求内容与http版本
strcat(request,"HOST:"); //主机名,,格式:"HOST:主机"
strcat(request,hostname);
strcat(request,"\r\n");
strcat(request,"Accept:*/*\r\n"); //接受类型,所有类型
// strcat(request,"User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");//指定浏览器类型?
// strcat(request,"Connection: Keep-Alive\r\n");//设置连接,保持连接
// strcat(request,"Set Cookie:0\r\n");//设置Cookie
// strcat(request,"Range: bytes=0 - 500\r\n");//设置请求字符串起止位置,断点续传关键"Range:bytes=999 -"
strcat(request,"\r\n");//空行表示结束
LOGI(request);
if( send (sockfd,request, strlen(request), 0) == -1){
LOGE("httpgetsend failed");
return -99;
}
LOGI("httpGetrecv");
memset(text,0,BUFFSIZE);
if( recv (sockfd,text, BUFFSIZE, 0) == -1){
LOGE("httpgetrecv failed");
return -98;
}
LOGI(text);
LOGI("httpGetend");
return 0;
}
调用:
httpGet("www.sina.com.cn");
LOGI(text);打印如下信息:
HTTP/1.1 200 OK
Content-Type:text/html
Vary:Accept-Encoding
X-Powered-By:shci_v1.03
Server: nginx
Date: Sat, 19 Oct2013 02:50:16 GMT
Last-Modified:Wed, 27 Apr 2005 02:00:04 GMT
Expired: Sat, 19Oct 2013 02:51:16 GMT
Cache-Control:max-age=60
Age: 1
Content-Length:25032
X-Cache: HIT fromxidan33-99.sina.com.cn
#include<netinet/in.h>
#include<sys/socket.h>
//LOG_TAG
#define LOGI(...)__android_log_print(ANDROID_LOG_INFO, "xcl",__VA_ARGS__)
#define LOGE(...)__android_log_print(ANDROID_LOG_ERROR, "xcl",__VA_ARGS__)
#define BUFFSIZE0xF000
int httpGet(char*hostname)
{
LOGI("httpGet");
LOGI(hostname);
charrequest[BUFFSIZE], text[BUFFSIZE];
charmyurl[BUFFSIZE] = {0};
char host[BUFFSIZE]= {0};
char GET[BUFFSIZE]= {0};
struct sockaddr_insin;
int sockfd;
if ((sockfd =socket (AF_INET, SOCK_STREAM, 0)) == -1) {
LOGE("httpgetcreate socket failed !");
return -100;
}
struct hostent *host_addr = gethostbyname(hostname);
if(host_addr==NULL){
LOGE("httpgetUnable to locate host");
return -103;
}
sin.sin_family =AF_INET;
sin.sin_port =htons( (unsigned short)80);
sin.sin_addr.s_addr= *((unsigned long*)host_addr->h_addr_list[0]);
if( connect(sockfd,(const struct sockaddr *)&sin, sizeof(struct sockaddr_in) ) == -1 ){
LOGE("httpgetconnect failed !");
return -101;
}
LOGI("httpGetsend");
// 向WEB服务器发送URL信息
memset(request, 0,BUFFSIZE);
strcat(request,"GET /index.html HTTP/1.1\r\n"); //请求内容与http版本
strcat(request,"HOST:"); //主机名,,格式:"HOST:主机"
strcat(request,hostname);
strcat(request,"\r\n");
strcat(request,"Accept:*/*\r\n"); //接受类型,所有类型
// strcat(request,"User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");//指定浏览器类型?
// strcat(request,"Connection: Keep-Alive\r\n");//设置连接,保持连接
// strcat(request,"Set Cookie:0\r\n");//设置Cookie
// strcat(request,"Range: bytes=0 - 500\r\n");//设置请求字符串起止位置,断点续传关键"Range:bytes=999 -"
strcat(request,"\r\n");//空行表示结束
LOGI(request);
if( send (sockfd,request, strlen(request), 0) == -1){
LOGE("httpgetsend failed");
return -99;
}
LOGI("httpGetrecv");
memset(text,0,BUFFSIZE);
if( recv (sockfd,text, BUFFSIZE, 0) == -1){
LOGE("httpgetrecv failed");
return -98;
}
LOGI(text);
LOGI("httpGetend");
return 0;
}
调用:
httpGet("www.sina.com.cn");
LOGI(text);打印如下信息:
HTTP/1.1 200 OK
Content-Type:text/html
Vary:Accept-Encoding
X-Powered-By:shci_v1.03
Server: nginx
Date: Sat, 19 Oct2013 02:50:16 GMT
Last-Modified:Wed, 27 Apr 2005 02:00:04 GMT
Expired: Sat, 19Oct 2013 02:51:16 GMT
Cache-Control:max-age=60
Age: 1
Content-Length:25032
X-Cache: HIT fromxidan33-99.sina.com.cn
相关文章推荐
- 怎么在linux下用c或是其他语言 构造一个http(get)请求呢?
- cocos2dx网络传输之CURL
- TCP/IP三次握手与四次挥手
- Linux下MySQL常用操作网络汇总总结
- 20140403 TCPL 第一章 致读者
- Android利用Fiddler进行网络数据抓包
- WAMP实战演练之Apache-httpd-2.4.9+MySQL-5.6.17+PHP-5.5.10开发环境搭建
- [Network]网络层
- HTTPClient六 高级主题
- HTTP客户端服务
- HTTP认证教程(四)
- HTTP状态管理
- HttpClien教程一
- 第二章 HttpClient连接管理
- iPhone开发技巧之网络篇(4)--- 确认网络环境
- 洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
- P1045 Kerry 的电缆网络(Kruskal+并查集)
- UDP,TCP头
- 洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT
- TCP协议的KeepAlive机制与HeartBeat心跳包