Linux命令发送Http的get或post请求(curl和wget两种方法)

Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求。下面就来介绍一下Linux系统如何模拟Http的get或post请求。

一、get请求

1、使用curl命令:

curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地

curl -i “http://www.baidu.com” 显示全部信息

curl -l “http://www.baidu.com” 只显示头部信息

curl -v “http://www.baidu.com” 显示get请求全过程解析

2、使用wget命令:

wget “http://www.baidu.com”也可以

二、post请求

1、使用curl命令(通过-d参数,把访问参数放在里面):

curl -d “param1=value1¶m2=value2” “http://www.baidu.com”

  
2、使用wget命令:(–post-data参数来实现)

wget --post-data ‘user=foo&password=bar’ http://www.baidu.com

  
以上就是Linux模拟Http的get或post请求的方法了,这样一来Linux系统也能向远程服务器发送消息了。

示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear

三、curl (可直接发送格式化请求例如json)

示例:目标url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}

命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002

nginx访问日志GET后面用http://开头

今天检查nginx访问日志的时候发现奇怪的日志

[02/Nov/2017:13:35:46 +0800] "GET http://www.baidu.com/ HTTP/1.1" 200 8672 "http://www.baidu.com" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" -

截图如下

未分类

这里取的只是百度的域名,还有好多其他的域名,这个应该是代理攻击

有没有发现GET后面用http://开头的,正常情况GET后面是用”/”开头,如下面的访问日志

[08/Nov/2017:21:54:15 +0800] "GET /2330.html HTTP/1.1" 200 8419 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" -

这个问题在百度gogole的相关文章比较少,所以现在不清楚目前的处理方法是否正确,如果你要遇到了这个问题,可以尝试一下

目前处理的方法

#nginx中添加下面的配置,主要作用就是没有指定域名的返回444

server {
    server_name _;
    location / { 
        return 444; 
    }
}
server
{

    listen 443 ssl http2;
    server_name www.phpsong.com;
    //...


    #添加代码,主要作用如果域名不是www.phpsong.com的就返回444
    if ($host !~ ^(phpsong.com|www.phpsong.com)$) {
              return 444;
    }

    //...
}

设置之后,发现这种日志不存在了,因为不清楚模拟这种攻击,所以不清楚是否已经解决了,apache的解决方法可以看一下这个文章https://wiki.apache.org/httpd/ProxyAbuse