C 发送原始http头

C 发送原始http头,c,http,sockets,request,response,C,Http,Sockets,Request,Response,我有以下原始HTTP请求: GET http://www.google.ie/ HTTP/1.1 Host: www.google.ie User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.

我有以下原始HTTP请求:

GET http://www.google.ie/ HTTP/1.1
Host: www.google.ie
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encod...
我正在尝试从本地主机发送此消息。有人能指出我在C或C++中如何做这件事的正确方向?

我目前正在研究套接字,但它并没有真正起作用

   int sockfdi, portnoi, ni;
   struct sockaddr_in serv_addri;
   struct hostent *serveri;
   portnoi =80;

   sockfdi = socket(AF_INET, SOCK_STREAM, 0);
   if (sockfdi < 0){
        error("***ERROR opening socket");
   }
   serveri = gethostbyname("172.16.1.218");
   if (serveri == NULL){
       fprintf(stderr,"***ERROR, no such host\n");
       exit(0);
   }

   bzero((char *) &serv_addri, sizeof(serv_addri));
   serv_addri.sin_family = AF_INET;
   bcopy((char *)serveri->h_addr, (char *)&serv_addri.sin_addr.s_addr, serveri->h_length);
   serv_addri.sin_port = htons(portnoi);
   if (connect(sockfdi,(struct sockaddr *) &serv_addri,sizeof(serv_addri)) < 0){
       error("***ERROR connecting");
   }
   printf("Please enter the message: ");
   bzero(buffer,256);
int,新墨西哥州波特诺;
serv_addri中的结构sockaddr_;
结构主机*serveri;
波尔图尼=80;
sockfdi=socket(AF_INET,SOCK_STREAM,0);
if(小于0){
错误(“***打开套接字时出错”);
}
serveri=gethostbyname(“172.16.1.218”);
if(serveri==NULL){
fprintf(stderr,“***错误,没有这样的主机\n”);
出口(0);
}
bzero((char*)&serv_addri,sizeof(serv_addri));
serv_addri.sin_family=AF_INET;
b复制((char*)服务器i->h_addr,(char*)和serv_addri.sin_addr.s_addr,服务器i->h_长度);
serv_addri.sin_port=htons(portnoi);
if(connect(sockfdi,(struct sockaddr*)&serv_addri,sizeof(serv_addri))<0){
错误(“***连接错误”);
}
printf(“请输入消息:”);
b0(缓冲器,256);
您可以尝试使用以下替代套接字:

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;
  struct curl_slist *headers = NULL;

  curl = curl_easy_init();
  if(curl) {
    headers = curl_slist_append(headers, "Host: www.google.ie");
    headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0");
    headers = curl_slist_append(headers, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    headers = curl_slist_append(headers, "Accept-Language: en-us,en;q=0.5");
    /* Add more headers here */
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.ie/");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    res = curl_easy_perform(curl);

    /* always cleanup */ 
    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);
  }
  return 0;
}
#包括
#包括
内部主(空)
{
卷曲*卷曲;
卷曲编码;
struct curl_slist*headers=NULL;
curl=curl_easy_init();
if(curl){
headers=curl\u slist\u append(headers,“主机:www.google.ie”);
headers=curl\u slist\u append(headers,“用户代理:Mozilla/5.0(X11;Linux x86\u 64;rv:5.0)Gecko/20100101 Firefox/5.0”);
headers=curl\u slist\u append(headers,“接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”);
headers=curl\u slist\u append(headers,“接受语言:en-us,en;q=0.5”);
/*在此处添加更多标题*/
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://www.google.ie/");
curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);
res=旋度(curl)\u容易执行(curl);
/*始终清理*/
卷曲/滑动/自由/全部(标题);
旋度\轻松\清洁(旋度);
}
返回0;
}

“它没有真正工作”是一个非常糟糕的问题描述。请确切地告诉我们什么不起作用/出错。顺便说一句:我编辑了你发布的标题-请非常小心,HTTP标题有一个非常特殊的格式,需要在信中遵循(特别是行尾)。嗨,Mat,是的,谢谢编辑。问题是错误(“***错误连接”)不断触发,我不知道如何找到它的根源。我也尝试过将“localhost”更改为“127.0.0.1”。请使用
perror
(或者至少打印
errno
),这样您就可以知道问题出在哪里。然后检查172.16.1.218:80上是否确实有服务器在侦听,并且您是否被防火墙阻止(例如)。请使用普通telnet进行检查。如果该IP/端口上没有任何内容正在侦听,您将无法连接到它…您好,非常感谢您的回复。我想这正是我需要的。如何打印响应标题?我正在谷歌上搜索,想知道现在的情况。看看这个网站。您可以使用CURLOPT_HEADERFUNCTION选项设置回调函数。回调应该匹配这个原型:size\t函数(void*ptr、size\t size、size\t nmemb、void*userdata);除了处理标题外,您还应该使用CURLOPT_WRITEFUNCTION选项分配一个回调函数,该函数处理来自请求的响应正文数据(即返回的HTML页面),因为默认情况下,curl_easy_perform()将在标准输出上打印正文,在输出中留下一堆HTML。非常感谢您的帮助。