0 votes

Hello I am trying to request data from a URL on my local Laravel PHP server. The issue is that I can successfully connected to the page without any errors, response code is 200 all OK, and I receive no body response in Godot.

I can reach the page without any special tokens and reach it in the browser,
The response is a simple response I set up with

return response('Hello World', 200);

` prints hello world in text/plain with 200 status code. its as simple as it gets.

In godot this is my code to request the page...

var err = 0
var tries = 0

make_connection() ** MAKES A CONNECTION TO THE HOST SERVER HERE


if send_data:
    var query = http.query_string_from_dict(send_data)
    var header = ["Content-Type: application/x-www-form-urlencoded",
                 "Content-Length: " + str(query.length()), 
                 "Accept: */*",
                 "Connection: keep-alive",
                 "Host: 127.0.0.1:8000"
                ]
    if debug:
        print(query)
    err = http.request(HTTPClient.METHOD_POST,page,header,query)
else:
    var header = ["Content-Type: application/x-www-form-urlencoded",
                 "Accept: */*",
                 "Connection: keep-alive",
                 "Host: 127.0.0.1:8000"
                ]
    err = http.request_raw(HTTPClient.METHOD_POST,page,header,[])
if debug:
    print("Requesting " + str(page))
# 0 is OK 
if err != 0:
    if debug:
        print("Request to [ " + page + " ] failed with " + str(err))
    prompt_to_connect()
else
            *** MAKES IT HERE WITHOUT ANY ERRORS
    while http.get_status() == HTTPClient.STATUS_REQUESTING:
        http.poll()
        OS.delay_msec(poll_delay)
        tries += 1
        if debug:
            print("Requesting...." + str(http.get_status()))
        if tries == 20:
            print("Request failed.")
            make_connection()

    if debug:
        print("Request status: " + str(http.get_status())) *** SAYS 5, CONNECTED
        print("Pre Request HTTP Code: " + str(http.get_response_code()))

    if http.has_response():
                   *** HAS A RESPONSE
        print(str(http.poll()))
        var raw_data = PoolByteArray()
        print(str(http.poll()))
        if debug:
            print("Request response...")
            print("Response Status: " + str(http.get_status())) **** 5 connected 
            print("Is Chunked? " + str(http.is_response_chunked())) *** brings back false 
            print("Response HTTP Code: " + str(http.get_response_code())) *** 200, OK
            print("Response Length: " +str(http.get_response_body_length())) *** returns 0, no length body.

        while http.get_status() == HTTPClient.STATUS_BODY: ***** this doesn't even get called, goes straight to STATUS_CONNECTED
            print("Polling response data...")
            print(str(http.poll()))

            var chunk = http.read_response_body_chunk()
            if chunk.size() == 0:
                OS.delay_usec(poll_delay)
            else:
                raw_data = raw_data + chunk

        ** should print raw_data into an ascii string, but raw_data is null because there is a zero-length body response. 

These are the response headers:

Host: 127.0.0.1:8000
Date: Fri, 21 Dec 2018 16:09:19 -0500
Connection: close
X-Powered-By: PHP/7.2.11
Cache-Control: no-cache, private
Date: Fri, 21 Dec 2018 21:09:19 GMT
Content-Type: text/plain; charset=UTF-8
Set-Cookie: XSRF-TOKEN=eyJpdiI6IktMc0dZbk9XSFgzdm56eUdSR1pnaGc9PSIsInZhbHVlIjoiaGJUUnBVQXNiUlZEeEd1czFzSkdMdklXQVYxZWdURU5acVMrNFJLZmt1SXU3WExcL0l4YXN3MjV1ZTgrbzhhUXEiLCJtYWMiOiJkNjA4OGU2ODlhYzNjODdiYWE5NzQ1NDZkOTIyMmEyNmM4YjQ5MmEzOTc2OTU2M2RlM2QwM2I3MjhjOTE4MmU0In0%3D; expires=Fri, 21-Dec-2018 23:09:19 GMT; Max-Age=7200; path=/
Set-Cookie: laravel_session=eyJpdiI6IkVLMGZ2VXRPR29XdkYzM2lIcTFBTHc9PSIsInZhbHVlIjoiWkcraUhremZSSkViQkVkYkhHNEo2d0UyNzlwSU9XS2dnTGtlQkFmU2lLWUlHdCs5QkJVSHJqblZvd3NabGFpaiIsIm1hYyI6ImRiZDA3N2E1ZTcyZGRiYjBmNjc1MjQyNmM4MThiZTQ2MTgxNjAzMjkwZjkzYThlMjhhODE5OWI0N2E1NmVmNTMifQ%3D%3D; expires=Fri, 21-Dec-2018 23:09:19 GMT; Max-Age=7200; path=/; httponly
in Engine by (18 points)

1 Answer

–1 vote

In the browser you use GET method, here you are using POST (METHODPOST)
Try METHOD
GET and see if it works for you.

by (847 points)

No, i submit a form via POST to the page. I can see the raw headers and request data in my browser

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.