Simple PHP Proxy: Get external HTML, JSON and more!

Version: 1.6, Last updated: 1/24/2009

Project Homehttp://benalman.com/projects/php-simple-proxy/
GitHubhttp://github.com/cowboy/php-simple-proxy/
Sourcehttp://github.com/cowboy/php-simple-proxy/raw/master/ba-simple-proxy.php
Summary
Simple PHP Proxy: Get external HTML, JSON and more!Version: 1.6, Last updated: 1/24/2009
LicenseCopyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.
ExamplesThis working example, complete with fully commented code, illustrates one way in which this PHP script can be used.
Release History
GET ParametersCertain GET (query string) parameters may be passed into ba-simple-proxy.php to control its behavior, this is a list of these parameters.
POST ParametersAll POST parameters are automatically passed through to the remote URL request.
JSON requestsThis request will return the contents of the specified url in JSON format.
JSONP requestsThis request will return the contents of the specified url in JSONP format (but only if $enable_jsonp is enabled in the PHP script).
Native requestsThis request will return the contents of the specified url in the format it was received in, including the same content-type and other headers (but only if $enable_native is enabled in the PHP script).
Notes
Configuration OptionsThese variables can be manually edited in the PHP file if necessary.

License

Copyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.  http://benalman.com/about/license/

Examples

This working example, complete with fully commented code, illustrates one way in which this PHP script can be used.

Simplehttp://benalman.com/code/projects/php-simple-proxy/examples/simple/

Release History

1.6(1/24/2009) Defaults to JSON mode, which can now be changed to native mode by specifying ?mode=native.  Native and JSONP modes are disabled by default, because of possible XSS issues, but are configurable in the PHP script along with a url validation regex.
1.5(12/27/2009) Initial release

GET Parameters

Certain GET (query string) parameters may be passed into ba-simple-proxy.php to control its behavior, this is a list of these parameters.

urlThe remote URL resource to fetch.  Any GET parameters to be passed through to the remote URL resource must be urlencoded in this parameter.
modeIf mode=native, the response will be sent using the same content type and headers that the remote URL resource returned.  If omitted, the response will be JSON (or JSONP).  Native requests and JSONP requests are disabled by default, see Configuration Options for more information.
callbackIf specified, the response JSON will be wrapped in this named function call.  This parameter and JSONP requests are disabled by default, see Configuration Options for more information.
user_agentThis value will be sent to the remote URL request as the `User-Agent:` HTTP request header.  If omitted, the browser user agent will be passed through.
send_cookiesIf send_cookies=1, all cookies will be forwarded through to the remote URL request.
send_sessionIf send_session=1 and send_cookies=1, the SID cookie will be forwarded through to the remote URL request.
full_headersIf a JSON request and full_headers=1, the JSON response will contain detailed header information.
full_statusIf a JSON request and full_status=1, the JSON response will contain detailed cURL status information, otherwise it will just contain the `http_code` property.

POST Parameters

All POST parameters are automatically passed through to the remote URL request.

JSON requests

This request will return the contents of the specified url in JSON format.

Request

ba-simple-proxy.php?url=http://example.com/

Response

{ "contents": "<html>...</html>", "headers": {...}, "status": {...} }

JSON object properties

contents(String) The contents of the remote URL resource.
headers(Object) A hash of HTTP headers returned by the remote URL resource.
status(Object) A hash of status codes returned by cURL.

JSONP requests

This request will return the contents of the specified url in JSONP format (but only if $enable_jsonp is enabled in the PHP script).

Request

ba-simple-proxy.php?url=http://example.com/&callback=foo

Response

foo({ "contents": "<html>...</html>", "headers": {...}, "status": {...} })

JSON object properties

contents(String) The contents of the remote URL resource.
headers(Object) A hash of HTTP headers returned by the remote URL resource.
status(Object) A hash of status codes returned by cURL.

Native requests

This request will return the contents of the specified url in the format it was received in, including the same content-type and other headers (but only if $enable_native is enabled in the PHP script).

Request

ba-simple-proxy.php?url=http://example.com/&mode=native

Response

<html>...</html>

Notes

  • Assumes magic_quotes_gpc = Off in php.ini

Configuration Options

These variables can be manually edited in the PHP file if necessary.

$enable_jsonpOnly enable JSONP requests if you really need to.  If you install this script on the same server as the page you’re calling it from, plain JSON will work.  Defaults to false.
$enable_nativeYou can enable Native requests, but you should only do this if you also whitelist specific URLs using $valid_url_regex, to avoid possible XSS vulnerabilities.  Defaults to false.
$valid_url_regexThis regex is matched against the url parameter to ensure that it is valid.  This setting only needs to be used if either $enable_jsonp or $enable_native are enabled.  Defaults to ‘/.*/’ which validates all URLs.
This request will return the contents of the specified url in the format it was received in, including the same content-type and other headers (but only if $enable_native is enabled in the PHP script).
This request will return the contents of the specified url in JSONP format (but only if $enable_jsonp is enabled in the PHP script).
These variables can be manually edited in the PHP file if necessary.
Close