Note that there are some explanatory texts on larger screens.

plurals
  1. POCall REST API from c using sockets
    primarykey
    data
    text
    <p>I have a program where i am trying to call REST API of amazon.Here is the code</p> <pre><code>int main() { char * serveraddr = "myuser.s3.amazonaws.com"; int iProtocolPort = 0; char szSmtpServerName[64] = ""; char szBuffer[4096] = ""; char szMsgLine[1024] = ""; SOCKET hServer; WSADATA WSData; LPHOSTENT lpHostEntry; LPSERVENT lpServEntry; SOCKADDR_IN SockAddr; // Load command-line args lstrcpyA(szSmtpServerName, serveraddr); // Attempt to intialize WinSock (1.1 or later) if(WSAStartup(WINSOCK_VERSION, &amp;WSData)) { return 1; } // Lookup email server's IP address. lpHostEntry = gethostbyname(szSmtpServerName); if(!lpHostEntry) { cout &lt;&lt; "Cannot find SMTP mail server " &lt;&lt; szSmtpServerName &lt;&lt; endl; return 1; } // Create a TCP/IP socket, no specific protocol hServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(hServer == INVALID_SOCKET) { cout &lt;&lt; "Cannot open mail server socket" &lt;&lt; endl; return 1; } // Use the HTTP default port if no other port is specified iProtocolPort = htons(80); // Setup a Socket Address structure SockAddr.sin_family = AF_INET; SockAddr.sin_port = iProtocolPort; SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry-&gt;h_addr_list); // Connect the Socket if(connect(hServer, (PSOCKADDR) &amp;SockAddr, sizeof(SockAddr))) { cout &lt;&lt; "Error connecting to Server socket" &lt;&lt; endl; printf("Last error = %d\n",WSAGetLastError()); return 1; } int content_len = 0; char *query=NULL; char * tpl = (char *)"POST /test.txt?uploads HTTP/1.1\r\nHost: %s\r\n" "Authorization: AWS ABCDEFDGHIJKLMN:%s\r\n" "Date: %s\r\n\r\n"; //Get Time stamp char *currdate = currentDateTime(); char *sign = NULL; char signString [32]= {0}; //Generate sign string int ret = GenedateSignature(&amp;sign,currdate); memcpy(signString,sign,28); query = (char *)malloc(512*(sizeof(char ))); if(query == NULL) { LogMessage(LOG_FILE,"\nQuery == NULL \n"); return FALSE; } memset(query,0,512); content_len=0;//strlen((char*)Status); sprintf(query, tpl, (char*)serveraddr,signString,currdate); //Send data int r = send(hServer, query, strlen(query), 0); //Recv data recv(hServer, szBuffer, sizeof(szBuffer), 0); printf("\n%s",szBuffer); free(query); // Close server socket and prepare to exit. closesocket(hServer); WSACleanup(); return 0; } </code></pre> <p>when i send the data i get the number of bytes written but when i call recv i get <strong><em>"404 not found error"</em></strong></p> <p>Is it possible to call the REST API like this? If yes What i am doing wrong?</p> <p>Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload