搜索

首页  >  问答  >  正文

php - 有没有什么工具可以给某url批量发post请求?

有个几十万行的文本文件,里面逐行有一些信息
有没有什么工具可以给某个url批量按照文本文件一行行发post请求呢?
求具体说明

PHP中文网PHP中文网2816 天前755

全部回复(9)我来回复

  • PHPz

    PHPz2017-04-10 14:27:12

    一个写的比一个短你们这是逼我啊 ... 要比拼 Hello World 么 ..?

    awk '{ system( "curl -d \"data=" $0 "\" http://url" ) }' file.txt

    awk 单行搞定 ...

    回复
    0
  • ringa_lee

    ringa_lee2017-04-10 14:27:12

    有轮子的时候用轮子 ... 没有轮子的时候就自己造一个轮子好了 ...

    好吧其实我就是突然有一点点闲时间可以帮你写写代码这样 ...

    <?php
    /* put your text file location here ... */
    define( 'TEXT_SRC', '/path/to/your.text.file.txt' );
    
    /* put the url which you wanna post data to here ... */
    define( 'DATA_URL', 'http://the.url.data/goes.to' );
    
    /* put post field name here ... */
    define( 'POST_PFX', 'data' );
    
    /* read million data from source ... */
    $text_src = file( 
        TEXT_SRC, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES 
        );
    
    /* hey here comes cURL ... */
    $curl = curl_init();
    
    /* prepare cURL and make a very fashion UA header ... */
    curl_setopt_array( $curl, [
        CURLOPT_URL             =>  DATA_URL, 
        CURLOPT_USERAGENT       =>  
            'Mozilla/1.22 (compatible; MSIE 2.0; Windows 3.1)',
        CURLOPT_RETURNTRANSFER  =>  1, 
        CURLOPT_POST            =>  1, 
        ] );
    
    /* something to handle cURL result ... */
    $callback = function( $result ) {
        return;
    };
    
    /* time for our BIG LOOOOOOOP ! */
    foreach( $text_src as $data ) {
    
        /* fill data ... */
        curl_setopt( $curl, CURLOPT_POSTFIELDS, POST_PFX . '=' . $data );
    
        /* and send them out ! */
        $callback( curl_exec( $curl ) );
    
    }
    
    /* you have had a long flight ... time for rest ... */
    curl_close( $curl );  

    运行的话需要 php 5.4.0 以上的版本和 cURL 扩展 ... 前三行是配置区需要自行修改 ...

    另外程序是以牺牲内存为代价提升效率的 ... 因为我觉得说只有几十万行的话应该文件不会太大 ...

    程序会把那个文本文档一股脑读进内存 ... 所以如果要处理更多数据的话还要修改 ...

    恩 ... 就是这样 ... 看看是不是你想要的效果呢 ..?

    回复
    0
  • PHPz

    PHPz2017-04-10 14:27:12

    这种事情太适合用PYTHON来实现了。简单的代码如下:

    text = open("__init__.py")
    import urllib
    while True:
        line = text.readline()
        if not line:
            break
        params = urllib.urlencode({'arg': line})
        f = urllib.urlopen("http://UrUrl", params)
        print f.read()
    text.close()

    如果需要的话还可以加入连接超时然后重新发起请求,还可以使用多线程来减少整个的时间。

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:27:12

    不太清楚你说的是一次 HTTP 请求还是多次请求。如果需要一次请求发送几十万行的文本数据,中间非常容易断掉。如果是多次请求,每次请求发送一行文本数据,可以试试看 curl 。不同的编程语言都有不同的实现方法,具体请查阅对应语言的官方文档。

    回复
    0
  • 迷茫

    迷茫2017-04-10 14:27:12

    nodejs:

    lineArray = []
    request = require 'request'
    lineArray.forEach (line)->
        request.post line

    回复
    0
  • 怪我咯

    怪我咯2017-04-10 14:27:12

    试试apache的ab,或者类似的siege, http_load

    回复
    0
  • PHP中文网

    PHP中文网2017-04-10 14:27:12

    js: for(var i=0;i<n;++i){window.open(url);}

    回复
    0
  • 黄舟

    黄舟2017-04-10 14:27:12

    import requests
    
    file = open("text.txt")
    for text in file.readlines():
        data = {"data":text}
        resp = requests.get(url=url, data=data)
        print resp.text
    file.close()

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:27:12

    你们为什么一定要比短....

    wget -b -q -O /dev/null --post-data="" -i urls_file

    回复
    0
  • 取消回复