Ik moet content van een webapplicatie parsen binnen een website, en gebruik daarvoor PHP (DOM en XPath), en dat werkt goed.
Echter, een bepaald deel van de applicatie werkt zo: er is een vaste URL die ik kan aanroepen, en de web server geeft dan in een HTTP 302 response, een dynamische URL terug. Nu krijg ik, zowel bij DOM als bij file_get_contents, steeds 400 Bad Request terug.
Na een debugging-proxy te hebben geïnstalleerd ben ik achter het volgende gekomen:
PHP vraagt:
Response web server:
PHP vraagt:
En op die vraag krijgt PHP een 400 bad request terug.
De fout zit 'm erin dat PHP een tweede slash toevoegt bij de laatste request: /apex//f - terwijl daar een enkele slash moet staan en daardoor komt de bad request. Ik heb het gevalideerd in de web browser en als ik daar een dubbele slash doe krijg ik een bad request, en met een enkele slash krijg ik de content die ik wil.
Is dit een bug van PHP?
Hoe kan ik dit het beste oplossen? Ik kan de applicatie alleen maar webbased benaderen.
Ik gebruik voor het ontwikkelen van mijn PHP pagina, MAMP op OS X.
Echter, een bepaald deel van de applicatie werkt zo: er is een vaste URL die ik kan aanroepen, en de web server geeft dan in een HTTP 302 response, een dynamische URL terug. Nu krijg ik, zowel bij DOM als bij file_get_contents, steeds 400 Bad Request terug.
PHP:
1
2
3
4
| $application = "http://10.0.0.5/apex/"; $application_query = "f?p=100:81:8251090794992196::::F123_PJT_ID:341"; $url = $application . $application_query; echo(file_get_contents($url)); |
Na een debugging-proxy te hebben geïnstalleerd ben ik achter het volgende gekomen:
PHP vraagt:
code:
1
2
3
| GET /apex/f?p=100:81:8251090794992196::::F123_PJT_ID:341 HTTP/1.0 Host: 10.0.0.5 Connection: close |
Response web server:
code:
1
2
3
4
5
| HTTP/1.0 302 Found Date: Mon, 24 Sep 2018 00:22:59 GMT Server: Oracle XML DB/Oracle Database Location: f?p=100:81:4457738217132505::::F123_PJT_ID:341 Connection: close |
PHP vraagt:
code:
1
2
3
| GET /apex//f?p=100:81:4457738217132505::::F123_PJT_ID:341 HTTP/1.0 Host: 10.0.0.5 Connection: close |
En op die vraag krijgt PHP een 400 bad request terug.
code:
1
2
3
4
5
6
7
8
9
10
11
| HTTP/1.0 400 Bad Request Date: Mon, 24 Sep 2018 00:22:59 GMT Server: Oracle XML DB/Oracle Database Content-Type: text/html; charset=UTF-8 Connection: close <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>400 Bad Request</TITLE> </HEAD><BODY><H1>Bad Request</H1> The HTTP client sent a request that this server could not understand.</BODY></HTML> |
De fout zit 'm erin dat PHP een tweede slash toevoegt bij de laatste request: /apex//f - terwijl daar een enkele slash moet staan en daardoor komt de bad request. Ik heb het gevalideerd in de web browser en als ik daar een dubbele slash doe krijg ik een bad request, en met een enkele slash krijg ik de content die ik wil.
Is dit een bug van PHP?

Ik gebruik voor het ontwikkelen van mijn PHP pagina, MAMP op OS X.