The task - How to convert a plain text string to URL-format in LoadRunner?
Several days ago I faced with a simple task - it was needed to convert a passed parameter (which was in a plain text form) to URL-format. In other words, I had to convert:
string "ab" to the same string "ab"
string "a b" to the string "a%20b"
string "a b_c%" to "a%20b%5Fc%25"
and so on ...
The cause - Why it was needed?
LoadRunner script contained parameters, which should be passed to URL directly. Some my parameters contained special characters like spaces (" "), quotes ("), percentage ("%"), asterisks ("*") and others. To be processed correctly by a browser and a web server, these characters should be translated and passed as their hex-codes.
For example:
a space character (" ") has hex-code 0x20, so it should be passed as "%20"
underline character (" ") has hex-code 0x5F, so it should be passed as "%5F"
The ways on how to perform the task.
To perform this task I decided to use LoadRunner's web_convert_param function. I didn't know at that time that this function does not satisfy my requirements. So, I was reluctant to write my own function EncodePlainToURL. Well, let's see both solutions.
Several days ago I faced with a simple task - it was needed to convert a passed parameter (which was in a plain text form) to URL-format. In other words, I had to convert:
string "ab" to the same string "ab"
string "a b" to the string "a%20b"
string "a b_c%" to "a%20b%5Fc%25"
and so on ...
The cause - Why it was needed?
LoadRunner script contained parameters, which should be passed to URL directly. Some my parameters contained special characters like spaces (" "), quotes ("), percentage ("%"), asterisks ("*") and others. To be processed correctly by a browser and a web server, these characters should be translated and passed as their hex-codes.
For example:
a space character (" ") has hex-code 0x20, so it should be passed as "%20"
underline character (" ") has hex-code 0x5F, so it should be passed as "%5F"
The ways on how to perform the task.
To perform this task I decided to use LoadRunner's web_convert_param function. I didn't know at that time that this function does not satisfy my requirements. So, I was reluctant to write my own function EncodePlainToURL. Well, let's see both solutions.
web_convert_param function.
As Help says, web_convert_param function converts HTML to a URL or plain text.
So, I wrote this code:
char sIn[] = "t es%d$ + eprst_"; That means that space (" ") was converted to a plus ("+"). I expected to see "%20" instead of a plus character.
Actually, it seems that "+" and "%20" are twins. For example Google uses a plus to encode a space within a search query. For example, if the query is "some text", then the URL will be: http://www.google.com/search?hl=en&q=some+text&btnG=Google+Search
I was tried to encode spaces (and others special characters) to their hex-codes.
That's why the following function was written:
EncodePlainToURL function.
The logic is simple enough:
If the current character is a digits or an alphabetic letter, then pass it "as is"
Otherwise the current character is a special one. So, hex-code should be written in this case This is a code of EncodePlainToURL function:/* * EncodePlainToURL converts a plain text string to an URL-form string. * * Parameters: sIn - input string to be encoded to URL format * sOut - output buffer * Note: the size of "sOut" parameter should be at least equal to triple size * of "sIn" parameter plus one character(for end-terminator '\0')
Examples:
"a" -> "a" * "a b" -> "a%20b" * "a b_cc:\/c%" -> "a%20b%5Fcc%3A%2Fc%25" */
char *EncodePlainToURL(const char *sIn, char *sOut)
{
int i;
char cCurChar;
char sCurStr[4] = {0};
sOut[0] = '\0'; for (i = 0; cCurChar = sIn[i]; i++)
{
// if this is a digit or an alphabetic letter
if (isdigit(cCurChar) || isalpha(cCurChar))
{
// then write the current character "as is"
sprintf(sCurStr, "%c", cCurChar); }
else
{
// else convert it to hex-form. "_" -> "%5F"
sprintf(sCurStr, "%%%X", cCurChar);
}
// append current item to the output string
strcat(sOut, sCurStr);
}
return sOut;
}
The example of usage is:
char sIn[] = "t es%d$ + eprst_"; char sOut[100];
lr_output_message("%s", EncodePlainToURL(sIn, sOut));
Execute the code, and see the result:
The input string "t es%d$ + eprst_" was converted to "t%20es%25d%24%20%2B%20eprst%5F".
As Help says, web_convert_param function converts HTML to a URL or plain text.
So, I wrote this code:
char sIn[] = "t es%d$ + eprst_"; That means that space (" ") was converted to a plus ("+"). I expected to see "%20" instead of a plus character.
Actually, it seems that "+" and "%20" are twins. For example Google uses a plus to encode a space within a search query. For example, if the query is "some text", then the URL will be: http://www.google.com/search?hl=en&q=some+text&btnG=Google+Search
I was tried to encode spaces (and others special characters) to their hex-codes.
That's why the following function was written:
EncodePlainToURL function.
The logic is simple enough:
If the current character is a digits or an alphabetic letter, then pass it "as is"
Otherwise the current character is a special one. So, hex-code should be written in this case This is a code of EncodePlainToURL function:/* * EncodePlainToURL converts a plain text string to an URL-form string. * * Parameters: sIn - input string to be encoded to URL format * sOut - output buffer * Note: the size of "sOut" parameter should be at least equal to triple size * of "sIn" parameter plus one character(for end-terminator '\0')
Examples:
"a" -> "a" * "a b" -> "a%20b" * "a b_cc:\/c%" -> "a%20b%5Fcc%3A%2Fc%25" */
char *EncodePlainToURL(const char *sIn, char *sOut)
{
int i;
char cCurChar;
char sCurStr[4] = {0};
sOut[0] = '\0'; for (i = 0; cCurChar = sIn[i]; i++)
{
// if this is a digit or an alphabetic letter
if (isdigit(cCurChar) || isalpha(cCurChar))
{
// then write the current character "as is"
sprintf(sCurStr, "%c", cCurChar); }
else
{
// else convert it to hex-form. "_" -> "%5F"
sprintf(sCurStr, "%%%X", cCurChar);
}
// append current item to the output string
strcat(sOut, sCurStr);
}
return sOut;
}
The example of usage is:
char sIn[] = "t es%d$ + eprst_"; char sOut[100];
lr_output_message("%s", EncodePlainToURL(sIn, sOut));
Execute the code, and see the result:
The input string "t es%d$ + eprst_" was converted to "t%20es%25d%24%20%2B%20eprst%5F".
No comments:
Post a Comment