2017-07-10 138 views
1

我使用wget來訪問文本文件中的鏈接列表。的鏈接的例子是:WGET - 錯誤414:請求URI太大

http://localhost:8888/data/test.php?value=ABC123456789 

PHP文件返回一個表與從中響應是被附加到另一文本文件信息。至於錯誤,很明顯,目前它不能處理大量的URL,因爲它超過了字符限制。如果我僅使用2個網址,則效果非常好。

文本文件包含總共10 000個URL。我使用的命令是:

wget -i /Applications/MAMP/htdocs/data/URLs.txt -O - >> /Applications/MAMP/htdocs/data/append.txt 

根據我的研究,一個快速的方法來「修復」這是改變LimitRequestLine或者如果它不存在添加。由於我使用甲基苯丙胺(適用於MacOS)我所做的是:

打開/Applications/MAMP/conf/apache/httpd.conf

而且AccessFileName .htaccess下插入:

LimitRequestLine 1000000000 
LimitRequestFieldSize 1000000000 

但我仍然得到同樣的錯誤。我不知道爲什麼會發生這種情況。

可能更容易使用cURL?如果是,那麼類似的命令是什麼?

+0

可能是您可以嘗試file_get_contents&file_put_contents或fgetcsv&fputcsv ... bot can處理龐大的數據集。 – Gunnrryy

+0

@Gunnrryy這可以從終端完成嗎? –

+0

你需要在你的php腳本中實現這些,並從終端運行php腳本。 file_get_contents&others是php本地函數。 – Gunnrryy

回答

3

您的414: Request-URI Too Large錯誤與url的數量無關,並且不,使用curl將無濟於事。

問題是,有些(或1?)您的網址對於目標服務器來說太長了,導致了錯誤。

你也許可以做

cat URLs.txt | awk '{print length, $0}' | sort -nr | head -1 

識別URL導致錯誤(感謝https://stackoverflow.com/a/1655488/1067003該命令)

另一個可能的原因是你沒有正確行終止的網址URLs.txt和一些網址(或全部網址)進行連接。爲記錄,終止字符是「\ n」,又名十六進制代碼0A - 不是大多數Windows編輯器使用的\ r \ n,我不知道wget如何處理這種格式不正確的行結束符(根據其定義)

請注意,如果您正在下載的.html文件加載(或任何其它壓縮文件),捲曲會比wget的快得多,因爲捲曲支持與--compressed參數(利用gzipdeflate作爲說話的)壓縮傳輸,而wget根本不支持壓縮 - 而且HTML壓縮效果非常好(比使用gzip的非壓縮版本輕鬆5-6倍)

+0

謝謝@hanshenrik!當我在終端中運行代碼時,它會返回列表中最後一個URL,並附加一些數字:'http:// localhost:8888/data/test.php?value = ABC9999999995660005'。正如你所看到的,最後一個參數應該是'ABC999999999',最後加上'5660005'。我該怎麼做? –

+0

嗨@hanshenrik。我將導出格式更改爲** Windows格式化文本(.txt)**,這對我來說很有吸引力。可以通過同時打開同時連接來加速嗎?也許通過使用某種'xargs'?這將是真正幫助我的最後一部分! –

+0

@AvaBarbilla是的,它可以。也許'cat URLs.txt | xargs --max-proc = 10 $(其中wget)' – hanshenrik

相關問題