Followers 0

# RakNet making call to php page

## 11 posts in this topic

RakNet has TCPInterface and HTTPConnection classes. I'm trying to make a call to a php page passing in a query string but it's not working. The final result should be data in a database but after I run it from C++ using RakNet there is no db entry. If I just use the url in a browser then there is an entry. So it's something to do with how I'm calling this from RakNet.

This works in a browser

This doesn't work (no error just no db entry) in C++ using RakNet

TCPInterface *tcp = RakNet::OP_NEW<TCPInterface>(__FILE__, __LINE__);

tcp->Start(0, 64);

HTTPConnection* http = RakNet::OP_NEW<HTTPConnection>(__FILE__, __LINE__);

http->Init(tcp, "localhost");

http->Update();

RakString data;
http->HasBadResponse(NULL, &data);

0

##### Share on other sites

When you browse to http://localhost/MyWebApp/gnet.php?opt=add&game=MyGame&server=mygame.net it works, right? Then it's GET not POST.

http->Get("/MyWebApp/gnet.php?opt=add&game=MyGame&server=mygame.net");

POST is when you submit form data through button click (more or less), not to mention you used POST incorrectly.

Edited by Zaoshi Kaba
0

##### Share on other sites

That didn't work either.

0

##### Share on other sites

1. No error or access log errors for php.

2. Wireshark shows nothing when filtering TCP/UDP on port 80. When I have no filters I don't seem to see anything either but the traffic lines move pretty fast since way more stuff is happening.

3. The only function that has a return value is tcp->Start() and that returns true.

4. That's a good point and I'll change it as soon as I can get RakNet to show any sort of activity using the easier Get.

I've used RakNet before with it's normal UDP method of doing things, but I've never used this HTTPConnection object and I can't seem to find much information about it at all. I know there are other libraries I could use but would prefer to not introduce another dependency to the project to do this when RakNet looks like it can handle it, but I just don't know who to work with it. Anyone have any experience with the HTTPConnection class?

Edited by rpiller
0

##### Share on other sites

2. Wireshark shows nothing when filtering TCP/UDP on port 80. When I have no filters I don't seem to see anything either but the traffic lines move pretty fast since way more stuff is happening.

Chances are, then, that you're not getting RakNet to actually send the message. Thus, you're not using the library correctly somehow.
I suggest getting the open source version and stepping through it in the debugger.

Separately, when "data scrolls by quickly," the right thing to do is to start recording, provoke whatever it is you want to look for, and then stop recording, and then look at the capture after-the-fact for traces of clues. For example, maybe there is a DNS look-up (typically on port 53) for the address you're trying to connect to?
0

##### Share on other sites

Separately, when "data scrolls by quickly," the right thing to do is to start recording, provoke whatever it is you want to look for, and then stop recording, and then look at the capture after-the-fact for traces of clues.

Yep, that's what I do.

Thus, you're not using the library correctly somehow.

Yep, that's what I figured. This doesn't seem to be a popular process for RakNet since there is very little information online about it. I do have the open source version. I'll try stepping through but RakNet is rather complicated so I doubt I'll be able to see why it's not working, but will give it a try.

Edited by rpiller
0

##### Share on other sites

4. Finally, it is very bad form to modify a database in response to a GET request. Browser and network proxies will often treat GET as "safe," and may re-issue a second GET request if the first one somehow fails. Browsers and proxies may also pre-fetch "predicted" GET requests even if you haven't yet actually issued them, to "speed up your web experience."

<SemiOffTopic>

In my day job I primarily develop web applications. No one seems to understand that GETs should not update the database. No one. I helped another developer one time discover the source of a bug in his application. Essentially something was being written to the database at unexpected times. I took one look and knew immediately what was happening: A user's browser had decided that the URL was visited often enough that it decided it was important enough to thumbnail. Whenever that user opened Safari or a new tab, there was a chance the browser would fetch the page to refresh the thumbnail. If the web app had POSTed instead of issuing a GET to create that record, there would have been no problem.

</SemiOffTopic>

0

##### Share on other sites

When I create ASP.NET MVC web apps I only use POST for this stuff (almost everything I do is ajax calls updating a database at some point). I've inherited this php script and don't really work with php all that much. This is a very simple app and multiple get calls won't cause issues with the db based on how this specific app works and does checks before doing anything with the db, but yes I agree POST is the way to go, but just want to simplify the RakNet side by getting a simple GET to work. I'm not in refactoring mode or caring about this php script at this moment (as again it works and I inherited it with it using GET and I haven't looked into how to work with POST in a php script, which I will do at a later time) I simply need to get RakNet making valid HTTP calls.

No one seems to understand that GETs should not update the database. No one.

There are a lot of rules to remember/experience and a lot of frameworks/languages that people work in. It stands to reason some will be missed by some people. I've written console/desktop apps for most of my life and now switching to web apps within the last year (although this issue isn't for work but play). People all have different situations going on.

Edited by rpiller
0

##### Share on other sites

Found this on the web, maybe you have to use the RakNet::TCPInterface::Receive() function after you call Get():

   RakNet::TCPInterface tcp;
RakNet::HTTPConnection httpConnection;

httpConnection.Get("index.html");

tcp.Start(0, 64);

while (1)
{
if(packet)
{
httpConnection.ProcessTCPPacket(packet);
tcp.DeallocatePacket(packet);
}
httpConnection.Update();

if (httpConnection.IsBusy()==false)
{
printf(fileContents.C_String());
return;
}
// Prevent 100% cpu usage
RakSleep(30);
}

Edited by BeerNutts
1

##### Share on other sites

That worked! Thank you so much for the proper usage. Where did you find that if I may ask?

0

## Create an account

Register a new account