在 C http 请求中编辑 User-Agent

问题描述

当我尝试在我的 apache2 网络服务器上使用 C 代码执行 GET 请求时遇到错误请求。 这是日志:

92.184.98.135 - - [20/Jul/2021:11:52:17 +0000] "GET //log.PHP?log=test&name=name HTTP/1.1" 400 0 "-" "-"

当我用 Firefox 做同样的事情时:

92.184.98.135 - - [20/Jul/2021:11:59:17 +0000] "GET //log.PHP?log=log&name=name HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"

有人知道如何禁用 apache2 服务器的 User-Agent 检查吗?或者如果问题来自其他地方?

这是我在 c 中的函数代码

WSADATA wsa;
SOCKET sockfd;
char *message_fmt = "GET //log.PHP?log=%s&name=%s HTTP/1.1\r\n\r\n";
struct hostent *server;
struct sockaddr_in serv_addr;
int bytes,sent,received,total;
char message[4096],response[4096];

FILE * LOG_FILE;
LOG_FILE = fopen(file,"r+");

char log[1000] = "data:";
char ch = fgetc(LOG_FILE);

while(ch != EOF) {
    strncat(log,&ch,1); 
    ch = fgetc(LOG_FILE);
}

fclose(LOG_FILE);

char *username = getenv("USERNAME");

sprintf(message,message_fmt,log,username);

if((sockfd = socket(AF_INET,SOCK_STREAM,0 )) == INVALID_SOCKET)
    {
        fprintf(DEBUG,"Could not create socket : %d",WSAGetLastError());
    }

server = gethostbyname(adress);

memset(&serv_addr,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
memcpy(&serv_addr.sin_addr.s_addr,server->h_addr,server->h_length);

connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr);
total = strlen(message);
sent = 0;
do {
    bytes = send(sockfd,message+sent,total-sent,0);
    if (bytes < 0)
        {printf("ERROR writing message to socket");}
    if (bytes == 0)
        break;
    sent+=bytes;
} while (sent < total);

memset(response,sizeof(response));
total = sizeof(response)-1;
received = 0;
do {
    bytes = recv(sockfd,response+received,total-received,0);
    if (bytes < 0)
        {printf("ERROR reading response from socket");}
    if (bytes == 0)
        break;
    received+=bytes;
} while (received < total);

closesocket(sockfd);
WSACleanup();

至于此代码适用于 Windows,我使用这些库:

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib,"Ws2_32.lib")
#include <windows.h>
#include <winuser.h>
#include <string.h>

感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)