static uerr_t
gethttp (struct urlinfo *u, struct http_stat *hs, int *dt)
{
- char *request, *type, *command, *path;
+ char *request, *type, *command, *path, *qstring;
char *user, *passwd;
char *pragma_h, *referer, *useragent, *range, *wwwauth, *remhost;
char *authenticate_h;
char *proxyauth;
char *all_headers;
+ char *host_port;
+ int host_port_len;
int sock, hcount, num_written, all_length, remport, statcode;
long contlen, contrange;
struct urlinfo *ou;
path = u->proxy->url;
else
path = u->path;
+
+ qstring = u->qstring;
+
command = (*dt & HEAD_ONLY) ? "HEAD" : "GET";
referer = NULL;
if (ou->referer)
}
remhost = ou->host;
remport = ou->port;
+
+ if (remport == 80) {
+ host_port = NULL; host_port_len = 0;
+ }
+ else {
+ host_port = (char *)alloca (numdigit (remport) + 2);
+ host_port_len = sprintf (host_port, ":%d", remport);
+ }
+
/* Allocate the memory for the request. */
request = (char *)alloca (strlen (command) + strlen (path)
+ + (qstring ? strlen (qstring) : 0)
+ strlen (useragent)
- + strlen (remhost) + numdigit (remport)
+ + strlen (remhost) + host_port_len
+ strlen (HTTP_ACCEPT)
+ (referer ? strlen (referer) : 0)
+ (wwwauth ? strlen (wwwauth) : 0)
+ 64);
/* Construct the request. */
sprintf (request, "\
-%s %s HTTP/1.0\r\n\
+%s %s%s HTTP/1.0\r\n\
User-Agent: %s\r\n\
-Host: %s:%d\r\n\
+Host: %s%s\r\n\
Accept: %s\r\n\
%s%s%s%s%s%s\r\n",
- command, path, useragent, remhost, remport, HTTP_ACCEPT,
- referer ? referer : "",
- wwwauth ? wwwauth : "",
- proxyauth ? proxyauth : "",
- range ? range : "",
- pragma_h,
- opt.user_header ? opt.user_header : "");
+ command, path, qstring ? qstring : "", useragent, remhost,
+ host_port ? host_port : "",
+ HTTP_ACCEPT, referer ? referer : "",
+ wwwauth ? wwwauth : "",
+ proxyauth ? proxyauth : "",
+ range ? range : "",
+ pragma_h,
+ opt.user_header ? opt.user_header : "");
DEBUGP (("---request begin---\n%s---request end---\n", request));
/* Free the temporary memory. */
FREE_MAYBE (wwwauth);
/* Increment the pass counter. */
++count;
/* Wait before the retrieval (unless this is the very first
- retrieval). */
- if (!first_retrieval && opt.wait)
- sleep (opt.wait);
+ retrieval).
+ Check if we are retrying or not, wait accordingly - HEH */
+ if (!first_retrieval && (opt.wait || (count && opt.waitretry)))
+ if (count)
+ if (count<opt.waitretry)
+ sleep(count);
+ else
+ sleep(opt.waitretry);
+ else
+ sleep (opt.wait);
if (first_retrieval)
first_retrieval = 0;
/* Get the current time string. */