Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用套接字从c调用RESTAPI_C_Sockets_Rest - Fatal编程技术网

使用套接字从c调用RESTAPI

使用套接字从c调用RESTAPI,c,sockets,rest,C,Sockets,Rest,我有一个程序,我试图调用亚马逊的RESTAPI int main() { char * serveraddr = "myuser.s3.amazonaws.com"; int iProtocolPort = 0; char szSmtpServerName[64] = ""; char szBuffer[4096] = ""; char szMsgLine[1024]

我有一个程序,我试图调用亚马逊的RESTAPI

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, &WSData))
    {
        return 1;
    }

    // Lookup email server's IP address.
    lpHostEntry = gethostbyname(szSmtpServerName);
    if(!lpHostEntry)
    {
        cout << "Cannot find SMTP mail server " << szSmtpServerName << endl;
        return 1;
    }

    // Create a TCP/IP socket, no specific protocol
    hServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(hServer == INVALID_SOCKET)
    {
        cout << "Cannot open mail server socket" << 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->h_addr_list);

    // Connect the Socket
    if(connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr)))
    {
        cout << "Error connecting to Server socket" << 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(&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;

}
intmain()
{
char*serveraddr=“myuser.s3.amazonaws.com”;
int iProtocolPort=0;
char szSmtpServerName[64]=“”;
字符szBuffer[4096]=“”;
char szMsgLine[1024]=“”;
套接字服务器;
WSADATA-WSData;
LPHOSTENT lpHostEntry;
LPSERVENT LPSERVENT;
SOCKADDR_在SOCKADDR中;
//加载命令行参数
lstrcpyA(szSmtpServerName,serveraddr);
//尝试初始化WinSock(1.1或更高版本)
if(WSAStartup(WINSOCK_版本和WSData))
{
返回1;
}
//查找电子邮件服务器的IP地址。
lpHostEntry=gethostbyname(szSmtpServerName);
如果(!lpHostEntry)
{

API的东西看起来还可以吗(尽管可能有一些细微的错误?)但是您确实应该检查
send
recv
的返回值。它可能只发送了您的一半数据!test.txt上的POST应该做什么?您是否检查了文件是否存在?类似的调用在其他编程语言或工具中是否有效?