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 <[email protected] <mailto:[email protected]>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to