我试图在端口80上建立一个连接localhost并发送一个简单的http get请求,同时运行wireshark并查看报头。下面是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
int yes = 1;
char buffer[1024];
int newsockfd, portno, recv_length, sockfd;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
ssize_t number;
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
sockfd = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = 0;
serv_addr.sin_port = htons(80);
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
if(send(sockfd,
"GET / HTTP/1.1\r\n
Host: localhost\r\n
Connection: Keep-alive\r\n
Cache-Control: max-age=0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,;q=0.8\r\n
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36\r\n
Accept-Encoding: gzip, deflate, sdch\r\n
Accept-Language: en-US,en;q=0.8\r\n\r\n",
strlen("GET / HTTP/1.1\r\n
Host: localhost\r\n
Connection: Keep-alive\r\n
Cache-Control: max-age=0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,;q=0.8\r\n
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36\r\n
Accept-Encoding: gzip, deflate, sdch\r\n
Accept-Language: en-US,en;q=0.8\r\n\r\n"),
0) > 0)
{
printf("GET send from %d\n", sockfd);
}
else
{
printf("Problem in send %s\n", strerror(errno));
}
但当我编译并运行它时,它会给我带来很多错误。这是Errros的图像。发生此错误后,我将send函数更改为这个
send(sockfd,“get/http/1.1\r\n host:localhost\r\n\r\n”,strlen(“get/http/1.1\r\n host:localhost\r\n\r\n”)
编译进行得很好,但wireshark显示给我HTTP/1.0 400错误请求(text/html),所以我没有什么问题。
1)我使用过的send函数之间有什么区别?我的意思是,如果我发送
GET/HTTP/1.1\r\n主机:localhost\r\n\r\n
或
GET/HTTP/1.1\r\n主机:localhost\r\n连接:keep-alive\r\n cache-control:max-age=0\r\n accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp;q=0.8\r\n用户代理:mozilla/5.0(x11;Linux i686)appleWebkit/537.36(KHTML,like Gecko)chrome/40.0.2214.91 safari/537.36\r\n accept-encoding真的有关系吗:gzip,deflate,sdch\r\n accept-language:en-US,en;q=0.8\r\n\r\n
2)如何配置发送函数以发出正确的HTTP GET请求?
希望您能帮助。谢谢。
字符串中有文字换行符!您需要关闭并重新打开每一行的报价。例如:
if(send(sockfd,
"GET / HTTP/1.1\r\n"
"Host: localhost\r\n"
"Connection: Keep-alive\r\n"
"Cache-Control: max-age=0\r\n"
...
向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,
问题内容: 我正在尝试将Cookie与HttpGet请求一起发送,但是每次尝试都无法成功发送它。我也尝试直接修改标题,这是我的代码: 问题答案: 这实际上是HttpClient 4.0.1的正确实现,我只是没有获得正确的cookie。
我有一个WPF应用程序,需要从远程API检索配置数据。该API已经过测试,并且工作正常,返回我认为是正确的格式。我已经为响应等创建了一个数据类型,但是当我到达通过HttpClient获取响应的行时,它不会向API发送任何请求。 数据类型:- 我已经在API上运行了日志,我们没有看到请求,如果我们使用相同的代码模型调用另一个API控制器来调用Uri2(https://example.com/API/
问题内容: 我正在尝试使用node.js将http请求发送到neo4j数据库。这是我正在使用的代码: 我检查数据库是否正在运行(我已连接到管理网页,并且一切正常。)恐怕问题不在数据库方面,而在node.js方面。 我希望有人可以对此问题有所启发。我想学习如何在node.js中发送http请求,答案不必特定于neo4j问题。 提前致谢 问题答案: 如果是简单的GET请求,则应使用 否则,需要关闭。
问题内容: 我想在每次模拟结束时向我的Gmail帐户发送一封电子邮件。我尝试在网上搜索并发现sendEmail,但超时。如果有人能指出我所尝试的软件包或链接,我将不胜感激。 谢谢 问题答案: 您可以直接使用本地MTA 并向其提供符合RFC822的文本。