I am trying to communicate with a server that is ready to accept HTTP GET requests and send back data per the request. However, I have very little experience in socket programming and I don't really know how to debug this. Googling on the web hasn't yielded much, except people saying I need to read the HTTP 1.1 spec which is the last thing I want to do.
I seem to be able to create, bind the socket and then send a GET request and that seems ok too but I am not able to receive anything.
The following are the relevant parts of the code:
Connection established:
Code:
/* connect to host */
if(connect(hSocket,(struct sockaddr*)&Address,sizeof(Address))
== SOCKET_ERROR)
{
verbose("Could not connect to host a socket");
return 0;
}
verbose("Connection established")
Sending request:
Code:
char *getRequest = "GET /path/to/server.aspx?Action=GetConfig&MachineName=node1 HTTP/1.1\n";
if(send(hSocket, getRequest, strlen(getRequest), 0) < 0) {
verbose("Error with sending socket");
return 0;
}
else {
verbose("Successful with sending socket get request to get config file");
}
The above works fine, but then below the receiving fails, in the first if-statement:
Code:
verbose("Attempting to receive from server");
char echoBuffer[9999];
/* Receive config information from server */
int totalBytesRcvd = 0;
unsigned int echoStringLen;
int bytesRcvd;
printf("Received: "); /* Setup to print the echoed string */
while (totalBytesRcvd < echoStringLen)
{
/* Receive up to the buffer size (minus 1 to leave space for
a null terminator) bytes from the sender */
if ((bytesRcvd = recv(hSocket, echoBuffer, 9999 - 1, 0)) <= 0)
{
printf("recv() failed or connection closed prematurely");
return 0;
}
totalBytesRcvd += bytesRcvd; /* Keep tally of total bytes */
echoBuffer[bytesRcvd] = '\0'; /* Terminate the string! */
printf("%s", echoBuffer); /* Print the echo buffer */
}
Can anyone share some insight as to how I can re-write the receiving code to get the data that is supposed to be returned to be based on the GET request? What is wrong here?
Hi everybody,
I have a *.vbs file which I want to run automatically. I want to know if there is anyway to implement the given example
for e.g "http://255.255.255.55/script.vbs"
what I mean is does anyone know how to make an http request from a unix script??
Thanks in advance!!!!!!!!!!! (1 Reply)
Hi,
i need a guide how to write a script which i can do a http request. Let say the request look like below;
http://www.test.com?txid=1&type=service&server=linux
I have a list of "txid" (in *.txt) and need to run all "txid" acordingly. So that mean, every transaction i have to refer "txid"... (7 Replies)
Hi,
Maybe it's a stupid question, anyway here goes..
I have an Apache web server on Solaris box, let's say A, with a public ip
and a web application on a Linux box, uhmmm B, on a private lan with a private ip.
I want the people from outside to connect to the app, but its inside the lan,... (4 Replies)
Ok. I'm testing a new program component that is supposed to speed up our pipeline on the server. What it does is take in HEAD requests and shuffle them off to a different pipeline that is specially designed to handle HEAD requests quickly. The functionality works but now comes the question: how... (3 Replies)
Hi all,
Im trying to make an http get request to a web service from a linux machine like below and i get ERROR 500
wget http://10.1.21.236:8585/pns.asmx/Sen...&msgBody=werty
25018
$ --19:06:32-- http://10.1.21.236:8585/pns.asmx/Sen...erName=serverA
Connecting to 10.1.21.236:8585...... (1 Reply)
Hello,
I am using apache 2.2 and I need to have certain http requests (those including example.com for instance) to be executed normally and forwarded to another server.
With mod_rewrite, I could easily forward but then the input request would not be executed on my server. Right?
Am I... (1 Reply)
I am running a website but I still have problems with the "service temporarily unavailable error". I want to make a simple check if the website is up and running. Does anybody has an idea how to do it? (the site is password protected, so you have to add a user and pwd before logging in).
... (2 Replies)
Hi,
I am trying to write a shell script to parse the post request data that it received to a xml file. Below is the post request data that script is receiving.
-----------------------------7dd2339190c8e
Content-Disposition: form-data; name="param1"
1... (2 Replies)
Discussion started by: jdp
2 Replies
LEARN ABOUT NETBSD
accf_http
ACCF_HTTP(9) BSD Kernel Developer's Manual ACCF_HTTP(9)NAME
accf_http -- buffer incoming connections until a certain complete HTTP requests arrive
SYNOPSIS
options INET
pseudo-device accf_http
DESCRIPTION
This is a filter to be placed on a socket that will be using accept() to receive incoming HTTP connections.
Once installed on a listening socket, this filter is activated when a connection becomes ready to receive data (at which point accept(2)
would usually return the connected descriptor to the application). The filter prevents the descriptor from being returned immediately to the
application via accept(2). The descriptor is made available to the application via accept(2) only when one of the following conditions is
met:
1. A complete, syntactically valid HTTP/1.0 or HTTP/1.1 HEAD or GET request has been buffered by the kernel.
2. The data buffered by the kernel cannot be part of a complete, syntactically valid HTTP 1.0 or HTTP/1.1 HEAD or GET request.
The utility of accf_http is that a server will not have to context switch several times before performing the initial parsing of the request.
This effectively reduces the amount of required CPU utilization to handle incoming requests by keeping active processes in preforking servers
such as Apache low and reducing the size of the file descriptor set that needs to be managed by interfaces such as select(), poll() or
kevent() based servers.
EXAMPLES
If the accf_data accept filter is present in the kernel configuration, this will enable the http accept filter on the socket sok.
struct accept_filter_arg afa;
bzero(&afa, sizeof(afa));
strcpy(afa.af_name, "httpready");
setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
SEE ALSO setsockopt(2), accept_filter(9)HISTORY
The accept filter mechanism and the accf_http filter were introduced in FreeBSD 4.0. They were ported to NetBSD by Coyote Point Systems and
appeared in NetBSD 5.0.
AUTHORS
This manual page and the filter were written by Alfred Perlstein.
BSD September 4, 2008 BSD