2008-04-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Removed query part from filename in HTTP download. The query part means
	the substring after "?" in URL. Firefox seems do the same thing.
	A query part is sometimes very long and not suitable to filename,
	so I think it is better to remove it from filename.
	* src/HttpRequest.cc
	* src/HttpRequest.h
	* src/Request.cc
	* src/Request.h
	* test/HttpRequestTest.cc
	* test/RequestTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2008-04-27 04:09:08 +00:00
parent 1ef99931e1
commit 4663902500
7 changed files with 72 additions and 9 deletions

View File

@ -1,3 +1,16 @@
2008-04-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Removed query part from filename in HTTP download. The query part means
the substring after "?" in URL. Firefox seems do the same thing.
A query part is sometimes very long and not suitable to filename,
so I think it is better to remove it from filename.
* src/HttpRequest.cc
* src/HttpRequest.h
* src/Request.cc
* src/Request.h
* test/HttpRequestTest.cc
* test/RequestTest.cc
2008-04-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten Exception class. Throw exception object, not its pointer and

View File

@ -141,7 +141,7 @@ std::string HttpRequest::createRequest() const
} else {
requestLine += getDir()+"/";
}
requestLine += getFile();
requestLine += getFile()+getQuery();
}
requestLine +=
std::string(" HTTP/1.1\r\n")+
@ -281,4 +281,9 @@ std::string HttpRequest::getFile() const
return request->getFile();
}
std::string HttpRequest::getQuery() const
{
return request->getQuery();
}
} // namespace aria2

View File

@ -108,6 +108,8 @@ public:
std::string getFile() const;
std::string getQuery() const;
std::string getPreviousURI() const;
SharedHandle<Range> getRange() const;

View File

@ -88,12 +88,14 @@ bool Request::parseUrl(const std::string& url) {
port = 0;
dir = "";
file = "";
_query = "";
_username = "";
_password = "";
// find query part
std::string queryTemp;
std::string::size_type startQueryIndex = tempUrl.find("?");
if(startQueryIndex != std::string::npos) {
query = tempUrl.substr(startQueryIndex);
queryTemp = tempUrl.substr(startQueryIndex);
tempUrl.erase(startQueryIndex);
}
// find protocol
@ -154,7 +156,7 @@ bool Request::parseUrl(const std::string& url) {
if(tempUrl.size() > direp+1) {
file = tempUrl.substr(direp+1);
}
file += query;
_query = queryTemp;
return true;
}

View File

@ -69,6 +69,8 @@ private:
uint16_t port;
std::string dir;
std::string file;
/* after ? mark(includes '?' itself) */
std::string _query;
unsigned int tryCount;
// whether or not the server supports persistent connection
@ -119,6 +121,7 @@ public:
uint16_t getPort() const { return port; }
std::string getDir() const { return dir; }
std::string getFile() const { return file;}
std::string getQuery() const { return _query; }
void supportsPersistentConnection(bool f)
{

View File

@ -19,6 +19,7 @@ class HttpRequestTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testCreateRequest);
CPPUNIT_TEST(testCreateRequest_ftp);
CPPUNIT_TEST(testCreateRequest_with_cookie);
CPPUNIT_TEST(testCreateRequest_query);
CPPUNIT_TEST(testCreateProxyRequest);
CPPUNIT_TEST(testIsRangeSatisfied);
CPPUNIT_TEST(testUserAgent);
@ -34,6 +35,7 @@ public:
void testCreateRequest();
void testCreateRequest_ftp();
void testCreateRequest_with_cookie();
void testCreateRequest_query();
void testCreateProxyRequest();
void testIsRangeSatisfied();
void testUserAgent();
@ -457,6 +459,26 @@ void HttpRequestTest::testCreateRequest_with_cookie()
}
void HttpRequestTest::testCreateRequest_query()
{
SharedHandle<Request> request(new Request());
request->setUrl("http://localhost/wiki?id=9ad5109a-b8a5-4edf-9373-56a1c34ae138");
HttpRequest httpRequest;
httpRequest.setRequest(request);
std::string expectedText =
"GET /wiki?id=9ad5109a-b8a5-4edf-9373-56a1c34ae138 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Accept: */*\r\n"
"Host: localhost\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Connection: close\r\n"
"\r\n";
CPPUNIT_ASSERT_EQUAL(expectedText, httpRequest.createRequest());
}
void HttpRequestTest::testCreateProxyRequest()
{
SharedHandle<Request> request(new Request());

View File

@ -78,6 +78,7 @@ void RequestTest::testSetUrl1() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
}
@ -98,6 +99,7 @@ void RequestTest::testSetUrl2() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl3() {
@ -110,6 +112,7 @@ void RequestTest::testSetUrl3() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl4() {
@ -122,6 +125,7 @@ void RequestTest::testSetUrl4() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/aria2/aria3"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl5() {
@ -134,6 +138,7 @@ void RequestTest::testSetUrl5() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/aria2/aria3"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl6() {
@ -146,6 +151,7 @@ void RequestTest::testSetUrl6() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("aria3"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl7() {
@ -184,7 +190,8 @@ void RequestTest::testSetUrl11() {
CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("?query/"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("?query/"), req.getQuery());
}
void RequestTest::testSetUrl12() {
@ -195,7 +202,8 @@ void RequestTest::testSetUrl12() {
CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
}
void RequestTest::testSetUrl13() {
@ -206,7 +214,8 @@ void RequestTest::testSetUrl13() {
CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
}
void RequestTest::testSetUrl14() {
@ -218,7 +227,8 @@ void RequestTest::testSetUrl14() {
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("abc?query"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("abc"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
}
void RequestTest::testSetUrl15()
@ -231,6 +241,7 @@ void RequestTest::testSetUrl15()
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/dir1/dir2"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("file"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl16()
@ -243,6 +254,7 @@ void RequestTest::testSetUrl16()
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("file"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl17()
@ -253,7 +265,8 @@ void RequestTest::testSetUrl17()
CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/file%3cwith%252%20%20space"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("file%20with%20space;param?a=/?"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("file%20with%20space;param"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string("?a=/?"), req.getQuery());
}
void RequestTest::testRedirectUrl() {
@ -277,6 +290,7 @@ void RequestTest::testRedirectUrl() {
CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testRedirectUrl2() {
@ -303,7 +317,7 @@ void RequestTest::testResetUrl() {
Request req;
req.setUrl("http://aria.rednoah.com:8080/aria2/index.html");
req.setReferer("http://aria.rednoah.com:8080/");
req.redirectUrl("ftp://aria.rednoah.co.jp/");
req.redirectUrl("ftp://aria.rednoah.co.jp/index_en.html?view=wide");
bool v3 = req.resetUrl();
CPPUNIT_ASSERT(v3);
@ -319,6 +333,7 @@ void RequestTest::testResetUrl() {
CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testInnerLink() {
@ -326,6 +341,7 @@ void RequestTest::testInnerLink() {
bool v = req.setUrl("http://aria.rednoah.com/index.html#download");
CPPUNIT_ASSERT(v);
CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
}
void RequestTest::testSetUrl_zeroUsername()