Heim >Backend-Entwicklung >PHP-Tutorial >有没有什么工具可以给某url批量发post请求?

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

WBOY
WBOYOriginal
2016-06-06 20:50:411520Durchsuche

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

回复内容:

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

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

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

awk 单行搞定 ...

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

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

<?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 扩展 ... 前三行是配置区需要自行修改 ...

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

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

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

这种事情太适合用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()

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

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

nodejs:

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

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

js: for(var i=0;i

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()

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

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn