Search code examples
google-apioperahttp-status-code-301opera-mini

"301 Moved", Google APIs with Opera


In my web app I'm making a CURL call to Google's (unofficial) weather API at:

http://www.google.com/ig/api?weather=,,, ...

This works fine in all cases except when the page involved is accessed in Opera. When accessed in Opera, instead of the weather I get the following in the xml response:

301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/m/ig">here</A>.

How can I fix this? I've seen some suggestions around the web that clearing the cache is a solution, but that hasn't worked for me. Note I'm particularly concerned with Opera Mini.

Thanks a lot.


Solution

  • Update 2012-06-20: Tested with Opera 12 and Google has fixed the sniffing issue it seems.

    I do not think you can fix it. It would be interesting to know why Google does server-side user agent sniffing and redirects Opera to another URI. Could you paste the full weather URI, so we can test it at Opera ourselves? If do a get of the one you have given into Opera I get

    <xml_api_reply version="1">
    <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
    <problem_cause data=""/>
    </weather>
    </xml_api_reply>
    

    I also do not get a redirection, but I guess it is because the URI is not the one you have used.

    % curl -sI "http://www.google.com/ig/api?weather=,,,"
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=ISO-8859-1
    Date: Fri, 02 Mar 2012 12:04:44 GMT
    Pragma: no-cache
    Expires: Fri, 01 Jan 1990 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate
    Set-Cookie: PREF=ID=fe13590e95ceb98e:TM=1330689884:LM=1330689884:S=h1eocRzhNcZ_Kwoa; expires=Sun, 02-Mar-2014 12:04:44 GMT; path=/; domain=.google.com
    X-Content-Type-Options: nosniff
    Server: igfe
    X-XSS-Protection: 1; mode=block
    Transfer-Encoding: chunked
    

    More details will help, and I will complete here.

    Update 2012-03-12 First I tried with a simple curl.

    → curl -sI "http://www.google.com/ig/api?weather=,,,40735500,-73986500"
    
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=ISO-8859-1
    Date: Mon, 12 Mar 2012 13:16:43 GMT
    Pragma: no-cache
    Expires: Fri, 01 Jan 1990 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate
    Set-Cookie: PREF=ID=9bc71bbf2edb7ebb:TM=1331558203:LM=1331558203:S=K5Ew69E5IsYhA0s8; expires=Wed, 12-Mar-2014 13:16:43 GMT; path=/; domain=.google.com
    X-Content-Type-Options: nosniff
    Server: igfe
    X-XSS-Protection: 1; mode=block
    Transfer-Encoding: chunked
    

    Then with Opera User agent.

    → curl -sI -A "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.3; U; fr) Presto/2.10.229 Version/11.61" "http://www.google.com/ig/api?weather=,,,40735500,-73986500"
    
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=UTF-8
    Date: Mon, 12 Mar 2012 13:17:47 GMT
    Pragma: no-cache
    Expires: Fri, 01 Jan 1990 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate
    Set-Cookie: PREF=ID=54cc62619394059e:TM=1331558267:LM=1331558267:S=JRCO-WNJMUNMMHsO; expires=Wed, 12-Mar-2014 13:17:47 GMT; path=/; domain=.google.com
    X-Content-Type-Options: nosniff
    Server: igfe
    X-XSS-Protection: 1; mode=block
    Transfer-Encoding: chunked
    

    And finally with Firefox User Agent

    → curl -sI -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0" "http://www.google.com/ig/api?weather=,,,40735500,-73986500"
    
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=UTF-8
    Date: Mon, 12 Mar 2012 13:20:09 GMT
    Pragma: no-cache
    Expires: Fri, 01 Jan 1990 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate
    Set-Cookie: PREF=ID=ab709995945767a8:TM=1331558409:LM=1331558409:S=bom-8pa-x9gGY5Sb; expires=Wed, 12-Mar-2014 13:20:09 GMT; path=/; domain=.google.com
    X-Content-Type-Options: nosniff
    Server: igfe
    X-XSS-Protection: 1; mode=block
    Transfer-Encoding: chunked
    

    There is a no X-Content-Type-Options: nosniff in all cases and no redirection. What is the user agent you are using. You can type about:opera in the addressbar and the user agent string will appear.