Use request URI as referer if --referer="*" is given

pull/43/head
Tatsuhiro Tsujikawa 2013-01-08 21:42:42 +09:00
parent 58c047a4a8
commit 87af7c32c6
3 changed files with 24 additions and 2 deletions

View File

@ -170,7 +170,12 @@ FileEntry::getRequest
req.reset();
continue;
}
req->setReferer(util::percentEncodeMini(referer));
if(referer == "*") {
// Assuming uri has already been percent-encoded.
req->setReferer(uri);
} else {
req->setReferer(util::percentEncodeMini(referer));
}
req->setMethod(method);
spentUris_.push_back(uri);
inFlightRequests_.insert(req);

View File

@ -94,7 +94,9 @@
#define TEXT_PROXY_METHOD \
_(" --proxy-method=METHOD Set the method to use in proxy request.")
#define TEXT_REFERER \
_(" --referer=REFERER Set Referer. This affects all URLs.")
_(" --referer=REFERER Set Referer. This affects all URLs. If \"*\" is\n" \
" given, each request URI is used as a referer.\n" \
" This may be useful when used with -P option.")
#define TEXT_FTP_USER \
_(" --ftp-user=USER Set FTP user. This affects all URLs.")
#define TEXT_FTP_PASSWD \

View File

@ -15,6 +15,7 @@ class FileEntryTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testGetRequest);
CPPUNIT_TEST(testGetRequest_withoutUriReuse);
CPPUNIT_TEST(testGetRequest_withUniqueProtocol);
CPPUNIT_TEST(testGetRequest_withReferer);
CPPUNIT_TEST(testReuseUri);
CPPUNIT_TEST(testAddUri);
CPPUNIT_TEST(testAddUris);
@ -30,6 +31,7 @@ public:
void testGetRequest();
void testGetRequest_withoutUriReuse();
void testGetRequest_withUniqueProtocol();
void testGetRequest_withReferer();
void testReuseUri();
void testAddUri();
void testAddUris();
@ -184,6 +186,19 @@ void FileEntryTest::testGetRequest_withUniqueProtocol()
fileEntry->getRemainingUris()[1]);
}
void FileEntryTest::testGetRequest_withReferer()
{
SharedHandle<FileEntry> fileEntry = createFileEntry();
SharedHandle<InorderURISelector> selector(new InorderURISelector());
std::vector<std::pair<size_t, std::string> > usedHosts;
SharedHandle<Request> req =
fileEntry->getRequest(selector, true, usedHosts, "http://referer");
CPPUNIT_ASSERT_EQUAL(std::string("http://referer"), req->getReferer());
// URI is used as referer if "*" is given.
req = fileEntry->getRequest(selector, true, usedHosts, "*");
CPPUNIT_ASSERT_EQUAL(req->getUri(), req->getReferer());
}
void FileEntryTest::testReuseUri()
{
SharedHandle<InorderURISelector> selector(new InorderURISelector());