Hi Sean,

On 4/21/2015 1:46 AM, Sean Kanaley wrote:
Just comment out #:data and append it to the url:

 (http-sendrecv "maps.googleapis.com <http://maps.googleapis.com/>"
(string-append "http://maps.googleapis.com/maps/api/geocode/json?"; <http://maps.googleapis.com/maps/api/geocode/json> form-data)
                                   ;#:ssl? ssl?
                                   ;#:port port
                                   #:version #"1.1"
                                   #:method #"GET"
#:headers (list "Content-Type: application/x-www-form-urlencoded")
                                   ;#:data form-data
                                   ;#:content-decode decodes
                                   ))


Doesn't work - I get the same error back:
blah, blah ... Your client has issued a malformed or illegal request. That’s all we know ....

I've tried appending the data as you suggest. I've tried adding "?" deliberately to the URI. I've tried with and without #:headers. #:version #"1.0" and #"1.1". #:method #"GET" vs #"POST". Everything produces the same error.

But perversely the result of (string-append "http://maps.googleapis.com/maps/api/geocode/json?"; <http://maps.googleapis.com/maps/api/geocode/json> form-data) works if I paste it into a browser.

George


On Mon, Apr 20, 2015 at 8:37 PM, George Neuner <gneun...@comcast.net <mailto:gneun...@comcast.net>> wrote:

    Hi all,

    I'm having trouble accessing the Google geocode API using
    http-sendrecv.

    Code is:

    (define (lookup address)
      (let [
            (form-data  (alist->form-urlencoded
                         (list (cons 'address address)
                               )))

            (response #f)
            (lat  #f)
            (long #f)
           ]

        (printf "Looking up ~s~n" address)
        (printf "=> ~s~n" form-data)

        (with-handlers [
                        (exn:fail?
                         (lambda (e)
                           (fprintf (ferr) "~n~n%%~n~a~n%%~n" (format
    "Error: ~a" (exn-message e)))
                           ))
                       ]
          (let-values [
                       ((errcode header port)
                        (http-sendrecv "maps.googleapis.com
    <http://maps.googleapis.com>"
    "http://maps.googleapis.com/maps/api/geocode/json";
    <http://maps.googleapis.com/maps/api/geocode/json>
                                       ;#:ssl? ssl?
                                       ;#:port port
                                       #:version #"1.1"
                                       #:method #"GET"
                                       #:headers (list "Content-Type:
    application/x-www-form-urlencoded")
                                       #:data form-data
    ;#:content-decode decodes
                                       ))
                      ]
            (set! response (port->string port))
            ;(set! response (read-json port))
            (printf "=> ~s~n" response)
            ))

        (fprintf (ferr) "lat:~s long:~s~n"  lat long )
        (values lat long)
        ))

    It doesn't yet extract relevant data because I haven't yet
    successfully gotten anydata. 8-(


    As a test Ilookup the State House in Boston:

       (lookup "24 Beacon St, Boston, MA, 01233")

    Looking up "24 Beacon St, Boston, MA, 01233"
    => "address=24+Beacon+St%2C+Boston%2C+MA%2C+01233"
=> "<!DOCTYPE html>\n<html lang=en>\n <meta charset=utf-8>\n <meta name=viewport content=\"initial-scale=1, minimum-scale=1,
    width=device-width\">\n <title>Error 400 (Bad
    Request)!!1</title>\n <style>\n
    *{margin:0;padding:0}html,code{font:15px/22px
    arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7%
    auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* >
    body{background:url(//www.google.com/images/errors/robot.png
    <http://www.google.com/images/errors/robot.png>) 100% 5px
    no-repeat;padding-right:205px}p{margin:11px 0
    22px;overflow:hidden}ins{color:#777;text-decoration:none}a
    img{border:0}@media screen and
    
(max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png
    <http://www.google.com/images/errors/logo_sm_2.png>)
    no-repeat}@media only screen and
    
(min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png
    <http://www.google.com/images/errors/logo_sm_2_hr.png>) no-repeat
    0% 0%/100%
    100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png
    <http://www.google.com/images/errors/logo_sm_2_hr.png>) 0}}@media
    only screen and
    
(-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png
    <http://www.google.com/images/errors/logo_sm_2_hr.png>)
    no-repeat;-webkit-background-size:100%
    100%}}#logo{display:inline-block;height:55px;width:150px}\n
    </style>\n  <a href=//www.google.com/
    <http://www.google.com/>><span id=logo
    aria-label=Google></span></a>\n <p><b>400.</b> <ins>That’s an
    error.</ins>\n  <p>Your client has issued a malformed or illegal
    request.  <ins>That’s all we know.</ins>\n"
    lat:#f long:#f
    #f
    #f

    Totally unhelpful.
    However if I paste the URI and urlencoded data into a browser:

    
http://maps.googleapis.com/maps/api/geocode/json?address=24+Beacon+St%2C+Boston%2C+MA%2C+01233

    then I get a good return.  It also works from an HTML form, e.g.,

          <form
    action="http://maps.googleapis.com/maps/api/geocode/json";
    <http://maps.googleapis.com/maps/api/geocode/json> method="GET">
             <label>address</label>
             <input type="text" name="address" size="128" />
             <button type="submit" >
                 GEOCODE
                 </button>
             </form> <!-- login -->


    I'm using http-sendrecv successfully with other web APIs - I just
    can't figure out what I'm doing wrong with Google. Number and/or
    frequency of requests is not an issue - I'm very far from the
    daily limit and many minutes elapse between tests as I'm trying to
    figure out what's wrong.

    The documentation is at
    
https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests

    Any clues to pierce the veil of stupidity would be appreciated.
    Thanks,
    George


--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to