为什么80%的码农都做不了架构师?>>>   

任何代码只有你写过,才能深刻理解,有的时候看文档看的很茫然的时候,尽量找点别人的源码,在别人源码上更改,在调试,可能会达到事半功倍的效果。

近来项目需要linux中访问一个url接口传参数及获取返回值,看了很多方法,知道用socket,但是没接触过,感觉很茫然,就在网上找实例,看看了,有了一点感觉,又在别人的实例上改动之后竟然可以用了,当时就卡在了http的格式上,下面写个demo,只要在我的代码上吧url换了,肯定可以成功。注意url不要http://

 #include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>#define BUFSIZE 0xF000
void geturl(char* url)
{int cfd;struct sockaddr_in cadd;struct hostent *pURL = NULL;char myurl[BUFSIZE];char *pHost = 0;char host[BUFSIZE],GET[BUFSIZE];char request[BUFSIZE];static char text[BUFSIZE];int i,j;//分离主机中的主机地址和相对路径memset(myurl,0,BUFSIZE);memset(host,0,BUFSIZE);memset(GET,0,BUFSIZE);strcpy(myurl,url);for(pHost = myurl;*pHost != '/' && *pHost != '\0';++pHost);//获取相对路径保存到GET中if((int)(pHost-myurl) == strlen(myurl)){strcpy(GET,"/");//即url中没有给出相对路径,需要自己手动的在url尾
//部加上/}else{strcpy(GET,pHost);//地址段pHost到strlen(myurl)保存的是相对路径}//将主机信息保存到host中//此处将它置零,即它所指向的内容里面已经分离出了相对路径,剩下的为host信
//息(从myurl到pHost地址段存放的是HOST)*pHost = '\0';strcpy(host,myurl);//设置socket参数if(-1 == (cfd = socket(AF_INET,SOCK_STREAM,0))){printf("create socket failed of client!\n");exit(-1);}pURL = gethostbyname(host);//将上面获得的主机信息通过域名解析函数获得域>名信息//设置IP地址结构bzero(&cadd,sizeof(struct sockaddr_in));cadd.sin_family = AF_INET;cadd.sin_addr.s_addr = *((unsigned long*)pURL->h_addr_list[0]);cadd.sin_port = htons(80);//向WEB服务器发送URL信息memset(request,0,BUFSIZE);strcat(request,"GET ");strcat(request,GET);strcat(request," HTTP/1.1\r\n");//至此为http请求行的信息strcat(request,"HOST: ");strcat(request,host);strcat(request,"\r\n");strcat(request,"Cache-Control: no-cache\r\n\r\n");//连接服务器int cc;if(-1 == (cc = connect(cfd,(struct sockaddr*)&cadd,(socklen_t)sizeof(cadd)))){printf("connect failed of client!\n");exit(1);}printf("connect success!\n");//向服务器发送url请求的requestint cs;if(-1 == (cs = send(cfd,request,strlen(request),0))){printf("向服务器发送请求的request失败!\n");exit(1);}printf("发送成功,发送的字节数:%d\n",cs);//客户端接收服务器的返回信息memset(text,0,BUFSIZE);int cr;if(-1 == (cr = recv(cfd,text,BUFSIZE,0))){printf("recieve failed!\n");exit(1);}else{printf("receive succecc!\n");}close(cfd);
}int main(int argc,char* argv[])
{if(argc<2){printf("用法:%c url网页网址\n",argv[0]);exit(1);}geturl(argv[1]);return 0;
}

转载于:https://my.oschina.net/snail0/blog/312311

linux下c语言url请求相关推荐

  1. linux+下c语言编程项目,精通UNIX下C语言编程与项目实践

    cc -I  //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...

  2. Linux下C语言编程

    第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...

  3. 初识Linux下C语言编程

    本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...

  4. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编

    Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...

  5. linux c语言工具,Linux下C语言编程环境的工具.doc

    Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...

  6. Linux下C语言编程-进程的创建

    Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...

  7. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

  8. 利用多线程实现linux下C语言的聊天室程序:

    转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...

  9. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

最新文章

  1. JavaScript实现放大镜功能
  2. 3D物体识别的如果检验
  3. Python3--爬取数据之911网站信息爬取
  4. LSTM神经网络 和 GRU神经网络
  5. ionic 混合应用开发
  6. 运行startup.bat的启动过程
  7. 再译《A *路径搜索入门》之四
  8. java题-java运行时异常与一般异常有何异同?
  9. python纵向数据分析_python数据分析三个重要方法之:numpy和pandas
  10. 解决使用adprep升级windows2003/win2008/win2012域时遇到的问题
  11. Web Worker 你知道吗?
  12. 计算机语言疾病矫治操作流程,言语矫治专家决策系统的构建.doc
  13. python pip安装seaborn sns以及失败解决方法 sns.load_dataset(“tips“)
  14. ndroid分辨率 dpi 屏幕尺寸 对比图
  15. 数据库审计系统(启明设备)
  16. 北大公开课计算机,清华、北大、浙大的计算机课程资源集都在这里了
  17. 【数据科学】肯德尔等级相关系数( Kendall's tau coefficient )
  18. 《知识产权法》雨课堂期末答案
  19. 脆弱性和安全风险分析
  20. 华为关闭系统更新EMUI9.0禁止更新mate10降级EMUI9

热门文章

  1. 手机页面操作栏的创建及WebFont的使用
  2. Debian/Ubuntu Apache Mod_Rewrite 安装
  3. RobotStudio传送带设计
  4. java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架
  5. linux的工程管理器是,Linux工程管理器——make
  6. 河南理工大学计算机专业几本,2018河南理工大学是几本 是一本还是二本
  7. github打开前端样式丢失_微信小程序入门教程之二:页面样式
  8. cmd 取消点击锁定功能
  9. qt禁止拖动_[Qt]QMdiArea,无框架窗口的拖动
  10. java random.nextbyte_java.util.Random.next()方法实例