2011-02-23 17 views
9

ERROR:Estoy tratando de hacer una solicitud POST a una URL usando Curl pero obteniendo este error?

Entidad de solicitud demasiado grande El recurso solicitado /check.php no permite datos de la solicitud con las peticiones POST, o la cantidad de datos proporcionada en la solicitud excede el límite de capacidad.

Whar podría ser la razón de este error? Creo que el tamaño de los datos no puede ser la razón y sé que ./check.php acepta el método POST. ¿Es como una seguridad que está limitando el acceso?

cordiales, Aqif

Respuesta

1

Bueno, esa respuesta de error es, sin duda no se pretende una medida de seguridad. RFC 2616 dice esto acerca de 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.

¿Usted verificar que el tamaño no es el problema? Muchos webhosts tienen un límite de carga de POST bastante pequeño (hay pocas cosas que arrojan un 413).

De lo contrario, podría ser el script PHP devolviendo esta respuesta (a través de header()).

+0

No WAN notificada acerca de su respuesta a través mail:/ Lo siento por la respuesta tardía. Pero todavía necesito esto. Esto no debe ser problema de tamaño. Lo intenté con una longitud de contenido de 35 también. Pero, aún la misma respuesta. – Aqi

+0

@Aqi: Bueno, no puedo imaginar ninguna otra razón relevante por la que el servidor devuelva este código de error. Es posible que esté mal configurado, y el autor quería devolver algo más (¿403 Forbidden quizás? Http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4). – Piskvor

2

Me encontré con un problema similar con WFetch. Estaba especificando el encabezado Content-Length, y resulta que WFetch estaba virando en su propio encabezado Content-Length. Después de eliminar mi encabezado Content-Length, todo funcionó. ¿Podría ser este el caso con Curl también?

4

No estoy seguro si esto va a ayudar a nadie, pero el siguiente es lo que resolvió el problema para mí:

que tenía la siguiente:

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

la CURLOPT_POST es lo que estaba causando el problema. Mi rizo real no contenía ningún $ _POST vars, solo tenía una cadena de consulta $ _GET. Una vez que eliminé la línea con CURLOPT_POST, todo funcionó como se esperaba.

que no tuvimos este problema en un CentOS instalar, sin embargo, lo hice en mi Mac OS X Lion usando con PHP 5.3+

2

Si se ve obligado a hacer una petición POST sin parámetros, se puede establecer que cadena vacía o matriz. Eso resolvió este problema para mí.

De cualquier

curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 

O

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

Tenga en cuenta que el último de estos restablece la cabecera de tipo de contenido de forma implícita.

15

Si realmente quiere usar POST, entonces tendrá que usar CURLOPT_POST y CURLOPT_POSTFIELDS en este orden. Tener el resultado es útil para la depuración también.

<?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; 

editar: solo una nota, si no quiere enviar ningún parámetro con la publicación, utilice una matriz vacía. cadena vacía romperá curl.

+0

Esto eliminó mi error de "Solicitar entidad demasiado grande". Buena cosa. –

+0

El golpe para mí fue que la orden realmente importaba. Estaba configurando CURLOPT_POST después de CURLOPT_POSTFIELDS y estaba muy molesto. ¡Al ver esto, con el énfasis de Gergely en "en este orden" resolvió mi problema! –

+1

El error también ocurrirá si configura 'true' en CURLOPT_POST pero no envía ningún campo posterior. – JorgeeFG

0

Si utiliza curl_exec que debe establecer

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

Si se perderá que, por lo que tendrá Error 413 Entidad de solicitud demasiado grande

Cuestiones relacionadas