Question

J'ai cette application web ajax Je développe qu'essentiellement appelle le modérateur google api utilisant ajax et renvoie le résultat de faire quelque chose avec eux. Je sais que AJAX ne peut pas faire lui-même les demandes de domaine croix donc j'ai mis dans un proxy php sur serveur web en utilisant CURL dans les URL, faire la demande et renvoyer les données. Le problème que j'ai est que peu importe ce que je fais, chaque demande que je fais des retours dans un code d'état Http de 0. Je ne suis pas tout à fait sûr de ce qu'un code de 0 signifie vraiment, mais je pense qu'il a quelque chose à voir avec un échec de connexion . Voici mon code:

function populate() {
        var number = parseInt('93683',16);
        var url='https://www.googleapis.com/moderator/v1/series/'+number+'?key='+superkey;
        var xhttp = null;
        xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange=function() {
            if (xhttp.readyState==4 && xhttp.status==200) {
                data = xhttp.responseText;
                data = data.slice(data.indexOf('{'));
                data = jQuery.parseJSON(data);
                alert(data.contents);
            }
            else {
                alert('Error: '+xhttp.status);
            }
        }
        xhttp.open("GET",base_url+url,true);
        xhttp.send(null);
    }

Ce qui se passe est que j'envoie la demande et le fichier php suivant qu'il obtient et envoie une demande.

        // Script: Simple PHP Proxy: Get external HTML, JSON and more!
        //
        // *Version: 1.6, Last updated: 1/24/2009*
        // 
        // Project Home - http://benalman.com/projects/php-simple-proxy/
        // GitHub       - http://github.com/cowboy/php-simple-proxy/
        // Source       - http://github.com/cowboy/php-simple-proxy/raw/master/ba-simple-proxy.php
        // 
        // About: License
        // 
        // Copyright (c) 2010 "Cowboy" Ben Alman,
        // Dual licensed under the MIT and GPL licenses.
        // http://benalman.com/about/license/
        // 
        // About: Examples
        // 
        // This working example, complete with fully commented code, illustrates one way
        // in which this PHP script can be used.
        // 
        // Simple - http://benalman.com/code/projects/php-simple-proxy/examples/simple/
        // 
        // About: Release History
        // 
        // 1.6 - (1/24/2009) Now 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 vulnerability issues, but
        //       are configurable in the PHP script along with a url validation regex.
        // 1.5 - (12/27/2009) Initial release
        // 
        // Topic: 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. 
        // 
        //   url - The remote URL resource to fetch. Any GET parameters to be passed
        //     through to the remote URL resource must be urlencoded in this parameter.
        //   mode - If 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.
        //   callback - If 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_agent - This 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_cookies - If send_cookies=1, all cookies will be forwarded through to
        //     the remote URL request.
        //   send_session - If send_session=1 and send_cookies=1, the SID cookie will be
        //     forwarded through to the remote URL request.
        //   full_headers - If a JSON request and full_headers=1, the JSON response will
        //     contain detailed header information.
        //   full_status - If 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.
        // 
        // Topic: POST Parameters
        // 
        // All POST parameters are automatically passed through to the remote URL
        // request.
        // 
        // Topic: 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.
        // 
        // Topic: 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.
        // 
        // Topic: 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>
        // 
        // Topic: Notes
        // 
        // * Assumes magic_quotes_gpc = Off in php.ini
        // 
        // Topic: Configuration Options
        // 
        // These variables can be manually edited in the PHP file if necessary.
        // 
        //   $enable_jsonp - Only 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_native - You 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_regex - This 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.
        // 
        // ############################################################################

        // Change these configuration options if needed, see above descriptions for info.
        $enable_jsonp    = false;
        $enable_native   = false;
        $valid_url_regex = '/.*/';

        // ############################################################################

        $url = $_GET['url'];

        if ( !$url ) {

          // Passed url not specified.
          $contents = 'ERROR: url not specified';
          $status = array( 'http_code' => 'ERROR' );

        } else if ( !preg_match( $valid_url_regex, $url ) ) {

          // Passed url doesn't match $valid_url_regex.
          $contents = 'ERROR: invalid url';
          $status = array( 'http_code' => 'ERROR' );

        } else {
          $ch = curl_init( $url );

          if ( strtolower($_SERVER['REQUEST_METHOD']) == 'post' ) {
            curl_setopt( $ch, CURLOPT_POST, true );
            curl_setopt( $ch, CURLOPT_POSTFIELDS, $_POST );
          }

          if ( $_GET['send_cookies'] ) {
            $cookie = array();
            foreach ( $_COOKIE as $key => $value ) {
              $cookie[] = $key . '=' . $value;
            }
            if ( $_GET['send_session'] ) {
              $cookie[] = SID;
            }
            $cookie = implode( '; ', $cookie );

            curl_setopt( $ch, CURLOPT_COOKIE, $cookie );
          }

          curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
          curl_setopt( $ch, CURLOPT_HEADER, true );
          curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

          curl_setopt( $ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );

          list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );

          $status = curl_getinfo( $ch );

          curl_close( $ch );
        }

        // Split header text into an array.
        $header_text = preg_split( '/[\r\n]+/', $header );

        if ( $_GET['mode'] == 'native' ) {
          if ( !$enable_native ) {
            $contents = 'ERROR: invalid mode';
            $status = array( 'http_code' => 'ERROR' );
          }

          // Propagate headers to response.
          foreach ( $header_text as $header ) {
            if ( preg_match( '/^(?:Content-Type|Content-Language|Set-Cookie):/i', $header ) ) {
              header( $header );
            }
          }

          print $contents;

        } else {

          // $data will be serialized into JSON data.
          $data = array();

          // Propagate all HTTP headers into the JSON data object.
          if ( $_GET['full_headers'] ) {
            $data['headers'] = array();

            foreach ( $header_text as $header ) {
              preg_match( '/^(.+?):\s+(.*)$/', $header, $matches );
              if ( $matches ) {
                $data['headers'][ $matches[1] ] = $matches[2];
              }
            }
          }

          // Propagate all cURL request / response info to the JSON data object.
          if ( $_GET['full_status'] ) {
            $data['status'] = $status;
          } else {
            $data['status'] = array();
            $data['status']['http_code'] = $status['http_code'];
          }

          // Set the JSON data object contents, decoding it from JSON if possible.
          $decoded_json = json_decode( $contents );
          $data['contents'] = $decoded_json ? $decoded_json : $contents;

          // Generate appropriate content-type header.
          $is_xhr = strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
          header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) );

          // Get JSONP callback.
          $jsonp_callback = $enable_jsonp && isset($_GET['callback']) ? $_GET['callback'] : null;

          // Generate JSON/JSONP string
          $json = json_encode( $data );

          print $jsonp_callback ? "$jsonp_callback($json)" : $json;
        }

        ?>

Ma réponse du script php indique que le code d'état est 0 et le contenu sont nuls encore si je fais simple xmlhttp.status il dit 200. Ce problème a été frustrant pour moi une semaine. Le problème avec le script PHP ou mon ajax, ou quoi?

Était-ce utile?

La solution 2

Je trouve que le problème est que vous ne pouvez pas utiliser un proxy php sur un serveur localhost. Il doit être hébergé sur un serveur réel qui peut parler à d'autres serveurs externes. Faire cela finir de me permettre de faire une demande de domaine croix que je veux, mais il me limites seulement POST et GET demandes.

Autres conseils

Dans votre ajax, vous êtes jamais appelant tout code interne.

Vous semblez n'appeler depuis l'URL: 'https://www.googleapis.com/moderator/v1/series/'+number+'?key='+superkey

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top