2011-02-23 20 views
9

LỖI:Tôi đang cố gắng thực hiện một yêu cầu POST cho một URL bằng cách sử dụng Curl nhưng nhận được lỗi này?

Request Entity Too Large Tài nguyên yêu cầu /check.php không cho phép dữ liệu yêu cầu các yêu cầu POST, hoặc số lượng dữ liệu được cung cấp trong yêu cầu vượt quá giới hạn dung lượng.

Whar có thể là nguyên nhân của lỗi này? Tôi nghĩ rằng kích thước dữ liệu không thể là lý do và tôi biết ./check.php chấp nhận phương thức POST. Nó giống như một số bảo mật được lmiting truy cập?

regards, aqif

Trả lời

1

Vâng, đó là phản ứng lỗi chắc chắn là không có ý định một biện pháp an ninh. RFC 2616 nói này về 413 Request Entity Too Large:

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

Bạn xác minh rằng kích thước không phải là vấn đề? Nhiều webhost có giới hạn tải lên POST khá nhỏ (có rất ít thứ sẽ ném 413).

Nếu không, có thể chính kịch bản PHP trả lại phản hồi này (qua header()).

+0

tôi wan không được thông báo về câu trả lời của bạn thông qua mail:/ Xin lỗi vì trả lời muộn. Nhưng tôi vẫn cần cái này. Đây không phải là vấn đề kích thước. Tôi đã thử với độ dài nội dung là 35. Nhưng, vẫn còn phản ứng tương tự. – Aqi

+0

@Aqi: Vâng, tôi không thể tưởng tượng bất kỳ lý do nào khác có liên quan mà máy chủ sẽ trả lại mã lỗi này. Có thể nó đã được định cấu hình sai và tác giả muốn trả lại cái gì khác (403 Cấm có lẽ? Http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4). – Piskvor

2

Tôi đã gặp sự cố tương tự với WFetch. Tôi đã tự xác định tiêu đề Content-Length, và nó chỉ ra rằng WFetch đã có tiêu đề Content-Length của riêng nó. Sau khi xóa tiêu đề Nội dung Độ dài của tôi, mọi thứ đã hoạt động. Đây có phải là trường hợp với Curl không?

4

Không chắc chắn nếu điều này sẽ giúp bất cứ ai, nhưng sau đây là những gì giải quyết vấn đề này cho tôi:

tôi đã có sau:

$ch = curl_init($process_url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    $results = @curl_exec($ch); 

các CURLOPT_POST là những gì đã gây ra vấn đề. Curl thực tế của tôi không chứa bất kỳ $ _POST vars nào, nó chỉ có một chuỗi truy vấn $ _GET. Khi tôi đã xóa dòng với CURLOPT_POST, mọi thứ đã hoạt động như mong đợi.

tôi không gặp vấn đề này trên CentOS cài đặt, tuy nhiên, tôi đã làm trên máy Mac của tôi sử dụng OSX Lion với PHP 5.3+

2

Nếu bạn đang buộc phải thực hiện một yêu cầu POST không có tham số, bạn có thể đặt chúng vào chuỗi rỗng hoặc mảng. Điều đó giải quyết vấn đề này cho tôi.

Hoặc

curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 

Hoặc

curl_setopt($ch, CURLOPT_POSTFIELDS, array()); 

Hãy nhận biết rằng sau này các resets các content-type tiêu đề ngầm.

15

Nếu bạn thực sự muốn sử dụng POST thì bạn sẽ phải sử dụng CURLOPT_POST và CURLOPT_POSTFIELDS theo thứ tự này. Có kết quả là tiện dụng để gỡ lỗi là tốt.

<?php 

$params=array(
    'a'=>'text1', 
    'b'=>'text2' 
); 

$curl=curl_init(); 

curl_setopt($curl, CURLOPT_POST, TRUE); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 

$result=curl_exec($curl); 

print $result; 

chỉnh sửa: chỉ cần lưu ý, nếu bạn muốn gửi không có tham số nào với bài đăng, hãy sử dụng một mảng trống. chuỗi rỗng sẽ phá vỡ curl.

+0

Điều này đã loại bỏ lỗi "Yêu cầu đối tượng quá lớn" của tôi. Công cụ tuyệt vời. –

+0

Đá cho tôi là thứ tự thực sự quan trọng. Tôi đã thiết lập CURLOPT_POST sau CURLOPT_POSTFIELDS và nó đã rất khó chịu. Nhìn thấy điều này, với sự nhấn mạnh của Gergely về "theo thứ tự này" đã giải quyết được vấn đề của tôi! –

+1

Lỗi cũng sẽ xảy ra nếu bạn đặt 'true' thành CURLOPT_POST nhưng không gửi bất kỳ postfield nào. – JorgeeFG

0

Nếu bạn sử dụng curl_exec rằng bạn phải thiết lập

curl_setopt($ch, CURLOPT_POSTFIELDS, **array()**);

Nếu bạn sẽ bỏ lỡ điều đó, vì vậy bạn sẽ phải Lỗi 413 Request Entity Too Large

Các vấn đề liên quan