[PHP] HTTP post request geeft 411 error terug

Pagina: 1
Acties:
  • 261 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Ik probeer met het volgende script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
function rawurlencode_callback($value, $key)
{
    return "$key=" . rawurlencode($value);
}
 
$variables = array (
    'MAIL' => 'test@test.com',
    'NAME' => 'Test'
);
 
$encodedVariables = array_map ( 'rawurlencode_callback', $variables, array_keys($variables) );
 
$postContent = join('&', $encodedVariables);
$postContentLen = strlen($postContent);
echo $postContentLen;
 
define ('CRLF', "\r\n");
 
$streamCtx = stream_context_create (
  array (
    'http' => array (
      'method' => 'POST',
      'content' => $postContent,
      'header'  => "Content-type: application/x-www-form-urlencoded \r\nContent-Length: " . $postContentLen  . "\r\n"
    )
  )
);

$fp = fopen("http://URL.com", 'r', FALSE, $streamCtx);
$data = '';
 

    $data .= fread($fp, 1024);

 
fclose($fp);
 
echo $data; 
?>


Een POST request te maken op de server, maar ik krijg de volgende error:
failed to open stream: HTTP request failed! HTTP/1.1 411 Length Required in filename on line 30

Ik heb al op een paar verschillende manieren geprobeerd content-length erin te zetten, maar dit heeft geen effect. Iemand hier een idee over?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Waarom gebruik je die rawurlencode_callback en niet http_build_query?

Weet je zeker dat er dat in $postContent staat?

Je hebt een spatie staan achter de
Content-type: application/x-www-form-urlencoded \r\n
Krijg je nog een foutmelding in de http error log?

[ Voor 8% gewijzigd door LuCarD op 27-09-2007 13:27 ]

Programmer - an organism that turns coffee into software.


  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
heb het even aangepast:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$data = http_build_query($variables);
$postContentLen = strlen($data);
echo $data;
echo $postContentLen;
 
define ('CRLF', "\r\n");
 
$streamCtx = stream_context_create (
  array (
    'http' => array (
      'method' => 'POST',
      'content' => $data,
      'header'  => "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . $postContentLen  . "\r\n"
    )
  )
);

Zelfde effect
Ik heb geen toegang tot de server waar ik heen post, maar heb wel contact met diegene die erover gaat.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

sc0rpz schreef op donderdag 27 september 2007 @ 13:33:
heb het even aangepast:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$data = http_build_query($variables);
$postContentLen = strlen($data);
echo $data;
echo $postContentLen;
 
define ('CRLF', "\r\n");
 
$streamCtx = stream_context_create (
  array (
    'http' => array (
      'method' => 'POST',
      'content' => $data,
      'header'  => "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . $postContentLen  . "\r\n"
    )
  )
);

Zelfde effect
Ik heb geen toegang tot de server waar ik heen post, maar heb wel contact met diegene die erover gaat.
Probeer het eerst eens met een lokale server, waar je wel toegang tot hebt.

[edit]
Ik heb helaas geen toegang tot een server die een stream openen toestaat. Dan moet ik wachten tot ik thuis ben.

[ Voor 7% gewijzigd door LuCarD op 27-09-2007 13:47 ]

Programmer - an organism that turns coffee into software.


  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

$variables = array (
    'MAIL' => 'test@test.com',
    'NAME' => 'Test'
); 

$data = http_build_query($variables);
$postContentLen = strlen($data);
echo $data;
echo $postContentLen;
 
define ('CRLF', "\r\n");
 
$streamCtx = stream_context_create (
  array (
    'http' => array (
      'method' => 'POST',
      'content' => $data,
      'header'  => "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . $postContentLen  . "\r\n"
    )
  )
);


$fp = fopen("http://localhost/test2.php", 'r', FALSE, $streamCtx);
$data = '';
 

    $data .= fread($fp, 1024);

 
fclose($fp);
 
echo $data; 
?>


Doet het gewoon

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Ok, dan zou het dus aan de server liggen waar ik naartoe post?

Ik probeer het ook lokaal te testen maar hij doet er enorm lang over om het de pagina te open en geeft dan een timeout? Enig idee? Ik test het ook wel even op mijn eigen webserver..

Verwijderd

sc0rpz schreef op donderdag 27 september 2007 @ 13:58:
Ok, dan zou het dus aan de server liggen waar ik naartoe post?

Ik probeer het ook lokaal te testen maar hij doet er enorm lang over om het de pagina te open en geeft dan een timeout? Enig idee? Ik test het ook wel even op mijn eigen webserver..
En wat krijg je terug als je zelf dmv telnet een sessie opent naar de server en daar (handmatig) de http-opdrachten in typt (of plakt)? Als dat al fout gaat, weet je zeker dat het niet aan je script ligt (want zoals al is genoemd, het script lijkt weinig mis mee).

  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Kan het er iets mee te maken hebben dat er naar een ASP server gepost wordt? Misschien andere linebreaks ofzo?
Pagina: 1