2

I am having a problem where I am trying to split an HTTP request by a carriage return for a web proxy. The request does not seem to split.

Here is an example request: GET /pub/WWW/TheProject.html HTTP/1.1\r\nHost: www.w3.org\r\n

My attempt is:

char* split_request;
split_request = strtok(request, "\r\n");

But it never gets split? I am not sure what I am missing. It seems to split when I am using wget or the browser to test the web proxy, but doesn't with telnet.

user1816561
  • 319
  • 2
  • 4
  • 4
  • You seem to assume this is C's variant of `split` in other languages; it is not. `strtok` scans for *any* character in its argument string. – Jongware Nov 24 '14 at 09:49

2 Answers2

10

Are you doing this way?

#include <stdio.h>
#include <string.h>

int main (void)
{
    char str[] = "GET /pub/WWW/TheProject.html HTTP/1.1\r\nHost: www.w3.org\r\n";
    char* pch = NULL;

    pch = strtok(str, "\r\n");

    while (pch != NULL)
    {
        printf("%s\n", pch);
        pch = strtok(NULL, "\r\n");
    }
    return 0;
}

Output:

GET /pub/WWW/TheProject.html HTTP/1.1   
Host: www.w3.org
Jongware
  • 22,200
  • 8
  • 54
  • 100
Jagannath
  • 3,995
  • 26
  • 30
3

Check the below link:

How does strtok() split the string into tokens in C?

int main()
{
    char request[20]="some\r\nstring";
    char* split_request;
    split_request = strtok(request,"\r\n");
    while(split_request != NULL)
    {
       printf("%s\n",split_request);
       split_request = strtok(NULL,"\r\n");

    }

    return 0;
}
Community
  • 1
  • 1
Gopi
  • 19,784
  • 4
  • 24
  • 36