本文整理汇总了C++中FormData类的典型用法代码示例。如果您正苦于以下问题:C++ FormData类的具体用法?C++ FormData怎么用?C++ FormData使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了FormData类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TEST
TEST(FormDataTest, has) {
FormData* fd = FormData::create(UTF8Encoding());
fd->append("name1", "value1");
EXPECT_TRUE(fd->has("name1"));
EXPECT_EQ(1u, fd->size());
}
示例2: CFURLRequestCreateMutableCopy
void ResourceRequest::doUpdatePlatformHTTPBody()
{
CFMutableURLRequestRef cfRequest;
RetainPtr<CFURLRef> url = ResourceRequest::url().createCFURL();
RetainPtr<CFURLRef> firstPartyForCookies = ResourceRequest::firstPartyForCookies().createCFURL();
if (m_cfRequest) {
cfRequest = CFURLRequestCreateMutableCopy(0, m_cfRequest.get());
CFURLRequestSetURL(cfRequest, url.get());
CFURLRequestSetMainDocumentURL(cfRequest, firstPartyForCookies.get());
CFURLRequestSetCachePolicy(cfRequest, (CFURLRequestCachePolicy)cachePolicy());
CFURLRequestSetTimeoutInterval(cfRequest, timeoutInterval());
} else
cfRequest = CFURLRequestCreateMutable(0, url.get(), (CFURLRequestCachePolicy)cachePolicy(), timeoutInterval(), firstPartyForCookies.get());
FormData* formData = httpBody();
if (formData && !formData->isEmpty())
WebCore::setHTTPBody(cfRequest, formData);
if (RetainPtr<CFReadStreamRef> bodyStream = adoptCF(CFURLRequestCopyHTTPRequestBodyStream(cfRequest))) {
// For streams, provide a Content-Length to avoid using chunked encoding, and to get accurate total length in callbacks.
if (RetainPtr<CFStringRef> lengthString = adoptCF(static_cast<CFStringRef>(CFReadStreamCopyProperty(bodyStream.get(), formDataStreamLengthPropertyName())))) {
CFURLRequestSetHTTPHeaderFieldValue(cfRequest, CFSTR("Content-Length"), lengthString.get());
// Since resource request is already marked updated, we need to keep it up to date too.
ASSERT(m_resourceRequestUpdated);
m_httpHeaderFields.set(HTTPHeaderName::ContentLength, lengthString.get());
}
}
m_cfRequest = adoptCF(cfRequest);
#if PLATFORM(COCOA)
clearOrUpdateNSURLRequest();
#endif
}
示例3: String
void HiddenInputType::appendToFormData(FormData& formData) const
{
if (equalIgnoringCase(element().name(), "_charset_")) {
formData.append(element().name(), String(formData.encoding().name()));
return;
}
InputType::appendToFormData(formData);
}
示例4: toHTMLElement
// https://w3c.github.io/webappsec-credential-management/#passwordcredential-form-constructor
PasswordCredential* PasswordCredential::create(HTMLFormElement* form, ExceptionState& exceptionState)
{
// Extract data from the form, then use the extracted |formData| object's
// value to populate |data|.
FormData* formData = FormData::create(form);
PasswordCredentialData data;
AtomicString idName;
AtomicString passwordName;
for (FormAssociatedElement* element : form->associatedElements()) {
// If |element| isn't a "submittable element" with string data, then it
// won't have a matching value in |formData|, and we can safely skip it.
FileOrUSVString result;
formData->get(element->name(), result);
if (!result.isUSVString())
continue;
AtomicString autocomplete = toHTMLElement(element)->fastGetAttribute(HTMLNames::autocompleteAttr);
if (equalIgnoringCase(autocomplete, "current-password") || equalIgnoringCase(autocomplete, "new-password")) {
data.setPassword(result.getAsUSVString());
passwordName = element->name();
} else if (equalIgnoringCase(autocomplete, "photo")) {
data.setIconURL(result.getAsUSVString());
} else if (equalIgnoringCase(autocomplete, "name") || equalIgnoringCase(autocomplete, "nickname")) {
data.setName(result.getAsUSVString());
} else if (equalIgnoringCase(autocomplete, "username")) {
data.setId(result.getAsUSVString());
idName = element->name();
}
}
// Create a PasswordCredential using the data gathered above.
PasswordCredential* credential = PasswordCredential::create(data, exceptionState);
if (exceptionState.hadException())
return nullptr;
ASSERT(credential);
// After creating the Credential, populate its 'additionalData', 'idName', and 'passwordName' attributes.
// If the form's 'enctype' is anything other than multipart, generate a URLSearchParams using the
// data in |formData|.
credential->setIdName(idName);
credential->setPasswordName(passwordName);
FormDataOrURLSearchParams additionalData;
if (form->enctype() == "multipart/form-data") {
additionalData.setFormData(formData);
} else {
URLSearchParams* params = URLSearchParams::create(URLSearchParamsInit());
for (const FormData::Entry* entry : formData->entries()) {
if (entry->isString())
params->append(entry->name().data(), entry->value().data());
}
additionalData.setURLSearchParams(params);
}
credential->setAdditionalData(additionalData);
return credential;
}
示例5: TestNetworkPostTransfer
/**
* Test a POST form transfer
*/
static void TestNetworkPostTransfer()
{
// FIXME Setup a http server to serve the files
TestManager::AssertTrue("No web server setup for the tests", false);
return;
const std::string aURL(TEST_WEB_SITE"testpostwithparam.php");
std::string aPath = TestManager::GetInstance().getPath() + "NetworkTests/Refs/testpostwithparam.html";
const std::string aRef(aPath);
BIResourceHandleManager* aResourceHandleManager = getBIResourceHandleManager();
TestManager::AssertTrue("Transfer Job Manager obtained", aResourceHandleManager != NULL);
std::string aFileName;
GetTemporaryUnexistingFileName("/tmp/transfer", ".txt", aFileName);
TestResourceHandleClient aTestResourceHandleClient(aFileName);
FormData formData;
DeprecatedString aParams;
aParams = "param1=toto¶m2=kiki";
formData.appendData( static_cast<const void *> (aParams.ascii()), aParams.length() );
ResourceRequest aResourceRequest = ResourceRequest(static_cast<const KURL&> (aURL.c_str()));
aResourceRequest.setHTTPMethod("POST");
aResourceRequest.setHTTPReferrer(TEST_WEB_SITE);
aResourceRequest.setHTTPBody(formData.copy());;
RefPtr<BIResourceHandle> aResourceHandle = BIResourceHandle::create(aResourceRequest, &aTestResourceHandleClient, 0, false, false, false);
TestManager::AssertTrue("FormData flatten", aResourceRequest.httpBody()->flattenToString() == "param1=toto¶m2=kiki" );
TestManager::AssertTrue("Form data with correct element", aResourceRequest.httpBody()->elements().size() == 1 );
TestManager::AssertTrue("Correct Metadata", aResourceRequest.httpReferrer() == TEST_WEB_SITE );
TestManager::AssertTrue("Correct Method", aResourceHandle->method() == "POST");
gTransferFileCount = 1;
// Wait for the end of the transfer.
gTimeout = false;
WebCore::Timer<NetworkTest> aTimeoutTimer(NULL,&NetworkTest::TimeoutCallback);
aTimeoutTimer.startOneShot(20); // timeout in 20s
BIEventLoop* aEventLoop = BAL::getBIEventLoop();
BIEvent* event;
while( gTransferFileCount && !gTimeout ) {
aEventLoop->WaitEvent(event);
}
TestManager::AssertTrue("Transfer done", !gTransferFileCount );
BALFileComparison aFileComparison;
bool bEqual = aFileComparison.AreEqual( aFileName, aRef );
TestManager::AssertTrue("File as expected", bEqual );
unlink( aFileName.c_str() );
}
示例6: soup_session_async_new
bool ResourceHandle::startHttp(String urlString)
{
if (!session) {
session = soup_session_async_new();
soup_session_add_feature(session, SOUP_SESSION_FEATURE(getCookieJar()));
const char* soup_debug = g_getenv("WEBKIT_SOUP_LOGGING");
if (soup_debug) {
int soup_debug_level = atoi(soup_debug);
SoupLogger* logger = soup_logger_new(static_cast<SoupLoggerLogLevel>(soup_debug_level), -1);
soup_logger_attach(logger, session);
g_object_unref(logger);
}
}
SoupMessage* msg;
msg = soup_message_new(request().httpMethod().utf8().data(), urlString.utf8().data());
g_signal_connect(msg, "restarted", G_CALLBACK(restartedCallback), this);
g_signal_connect(msg, "got-headers", G_CALLBACK(gotHeadersCallback), this);
g_signal_connect(msg, "got-chunk", G_CALLBACK(gotChunkCallback), this);
HTTPHeaderMap customHeaders = d->m_request.httpHeaderFields();
if (!customHeaders.isEmpty()) {
HTTPHeaderMap::const_iterator end = customHeaders.end();
for (HTTPHeaderMap::const_iterator it = customHeaders.begin(); it != end; ++it)
soup_message_headers_append(msg->request_headers, it->first.utf8().data(), it->second.utf8().data());
}
FormData* httpBody = d->m_request.httpBody();
if (httpBody && !httpBody->isEmpty()) {
// Making a copy of the request body isn't the most efficient way to
// serialize it, but by far the most simple. Dealing with individual
// FormData elements and shared buffers should be more memory
// efficient.
//
// This possibly isn't handling file uploads/attachments, for which
// shared buffers or streaming should definitely be used.
Vector<char> body;
httpBody->flatten(body);
soup_message_set_request(msg, d->m_request.httpContentType().utf8().data(),
SOUP_MEMORY_COPY, body.data(), body.size());
}
d->m_msg = static_cast<SoupMessage*>(g_object_ref(msg));
soup_session_queue_message(session, d->m_msg, finishedCallback, this);
return true;
}
示例7: document
void HTMLTextAreaElement::appendToFormData(FormData& formData) {
if (name().isEmpty())
return;
document().updateStyleAndLayout();
const String& text =
(m_wrap == HardWrap) ? valueWithHardLineBreaks() : value();
formData.append(name(), text);
const AtomicString& dirnameAttrValue = fastGetAttribute(dirnameAttr);
if (!dirnameAttrValue.isNull())
formData.append(dirnameAttrValue, directionForFormData());
}
示例8: toHTTPBody
static HTTPBody toHTTPBody(const FormData& formData)
{
HTTPBody httpBody;
for (const auto& formDataElement : formData.elements()) {
HTTPBody::Element element;
switch (formDataElement.m_type) {
case FormDataElement::Type::Data:
element.type = HTTPBody::Element::Type::Data;
element.data = formDataElement.m_data;
break;
case FormDataElement::Type::EncodedFile:
element.filePath = formDataElement.m_filename;
element.fileStart = formDataElement.m_fileStart;
if (formDataElement.m_fileLength != BlobDataItem::toEndOfFile)
element.fileLength = formDataElement.m_fileLength;
if (formDataElement.m_expectedFileModificationTime != invalidFileTime())
element.expectedFileModificationTime = formDataElement.m_expectedFileModificationTime;
break;
case FormDataElement::Type::EncodedBlob:
element.blobURLString = formDataElement.m_url.string();
break;
}
httpBody.elements.append(WTF::move(element));
}
return httpBody;
}
示例9: CFURLResponseGetHTTPResponse
ResourceRequest ResourceHandleCFURLConnectionDelegate::createResourceRequest(CFURLRequestRef cfRequest, CFURLResponseRef redirectResponse)
{
ResourceRequest request;
CFHTTPMessageRef httpMessage = CFURLResponseGetHTTPResponse(redirectResponse);
if (httpMessage && CFHTTPMessageGetResponseStatusCode(httpMessage) == 307) {
RetainPtr<CFStringRef> lastHTTPMethod = m_handle->lastHTTPMethod().createCFString();
RetainPtr<CFStringRef> newMethod = adoptCF(CFURLRequestCopyHTTPRequestMethod(cfRequest));
if (CFStringCompareWithOptions(lastHTTPMethod.get(), newMethod.get(), CFRangeMake(0, CFStringGetLength(lastHTTPMethod.get())), kCFCompareCaseInsensitive)) {
RetainPtr<CFMutableURLRequestRef> mutableRequest = adoptCF(CFURLRequestCreateMutableCopy(0, cfRequest));
wkSetRequestStorageSession(m_handle->storageSession(), mutableRequest.get());
CFURLRequestSetHTTPRequestMethod(mutableRequest.get(), lastHTTPMethod.get());
FormData* body = m_handle->firstRequest().httpBody();
if (!equalIgnoringCase(m_handle->firstRequest().httpMethod(), "GET") && body && !body->isEmpty())
WebCore::setHTTPBody(mutableRequest.get(), body);
String originalContentType = m_handle->firstRequest().httpContentType();
if (!originalContentType.isEmpty())
CFURLRequestSetHTTPHeaderFieldValue(mutableRequest.get(), CFSTR("Content-Type"), originalContentType.createCFString().get());
request = mutableRequest.get();
}
}
if (request.isNull())
request = cfRequest;
if (!request.url().protocolIs("https") && protocolIs(request.httpReferrer(), "https") && m_handle->context()->shouldClearReferrerOnHTTPSToHTTPRedirect())
request.clearHTTPReferrer();
return request;
}
示例10:
void ArgumentCoder<ResourceRequest>::encode(ArgumentEncoder* encoder, const ResourceRequest& resourceRequest)
{
encoder->encode(resourceRequest.url().string());
encoder->encode(resourceRequest.httpMethod());
const HTTPHeaderMap& headers = resourceRequest.httpHeaderFields();
encoder->encode(headers);
FormData* httpBody = resourceRequest.httpBody();
encoder->encode(static_cast<bool>(httpBody));
if (httpBody)
encoder->encode(httpBody->flattenToString());
encoder->encode(resourceRequest.firstPartyForCookies().string());
encoder->encode(static_cast<uint32_t>(resourceRequest.soupMessageFlags()));
}
示例11: willSendRequest
static CFURLRequestRef willSendRequest(CFURLConnectionRef conn, CFURLRequestRef cfRequest, CFURLResponseRef cfRedirectResponse, const void* clientInfo)
{
#if LOG_DISABLED
UNUSED_PARAM(conn);
#endif
ResourceHandle* handle = static_cast<ResourceHandle*>(const_cast<void*>(clientInfo));
if (!cfRedirectResponse) {
CFRetain(cfRequest);
return cfRequest;
}
LOG(Network, "CFNet - willSendRequest(conn=%p, handle=%p) (%s)", conn, handle, handle->firstRequest().url().string().utf8().data());
ResourceRequest request;
if (cfRedirectResponse) {
CFHTTPMessageRef httpMessage = CFURLResponseGetHTTPResponse(cfRedirectResponse);
if (httpMessage && CFHTTPMessageGetResponseStatusCode(httpMessage) == 307) {
RetainPtr<CFStringRef> lastHTTPMethod(AdoptCF, handle->lastHTTPMethod().createCFString());
RetainPtr<CFStringRef> newMethod(AdoptCF, CFURLRequestCopyHTTPRequestMethod(cfRequest));
if (CFStringCompareWithOptions(lastHTTPMethod.get(), newMethod.get(), CFRangeMake(0, CFStringGetLength(lastHTTPMethod.get())), kCFCompareCaseInsensitive)) {
RetainPtr<CFMutableURLRequestRef> mutableRequest(AdoptCF, CFURLRequestCreateMutableCopy(0, cfRequest));
#if USE(CFURLSTORAGESESSIONS)
wkSetRequestStorageSession(ResourceHandle::currentStorageSession(), mutableRequest.get());
#endif
CFURLRequestSetHTTPRequestMethod(mutableRequest.get(), lastHTTPMethod.get());
FormData* body = handle->firstRequest().httpBody();
if (!equalIgnoringCase(handle->firstRequest().httpMethod(), "GET") && body && !body->isEmpty())
WebCore::setHTTPBody(mutableRequest.get(), body);
String originalContentType = handle->firstRequest().httpContentType();
RetainPtr<CFStringRef> originalContentTypeCF(AdoptCF, originalContentType.createCFString());
if (!originalContentType.isEmpty())
CFURLRequestSetHTTPHeaderFieldValue(mutableRequest.get(), CFSTR("Content-Type"), originalContentTypeCF.get());
request = mutableRequest.get();
}
}
}
if (request.isNull())
request = cfRequest;
// Should not set Referer after a redirect from a secure resource to non-secure one.
if (!request.url().protocolIs("https") && protocolIs(request.httpReferrer(), "https"))
request.clearHTTPReferrer();
handle->willSendRequest(request, cfRedirectResponse);
if (request.isNull())
return 0;
cfRequest = request.cfURLRequest();
CFRetain(cfRequest);
return cfRequest;
}
示例12: id
PassRefPtr<EncodedFormData> PasswordCredential::encodeFormData(
String& contentType) const {
if (m_additionalData.isURLSearchParams()) {
// If |additionalData| is a 'URLSearchParams' object, build a urlencoded
// response.
URLSearchParams* params = URLSearchParams::create(URLSearchParamsInit());
URLSearchParams* additionalData = m_additionalData.getAsURLSearchParams();
for (const auto& param : additionalData->params()) {
const String& name = param.first;
if (name != idName() && name != passwordName())
params->append(name, param.second);
}
params->append(idName(), id());
params->append(passwordName(), password());
contentType =
AtomicString("application/x-www-form-urlencoded;charset=UTF-8");
return params->toEncodedFormData();
}
// Otherwise, we'll build a multipart response.
FormData* formData = FormData::create(nullptr);
if (m_additionalData.isFormData()) {
FormData* additionalData = m_additionalData.getAsFormData();
for (const FormData::Entry* entry : additionalData->entries()) {
const String& name = formData->decode(entry->name());
if (name == idName() || name == passwordName())
continue;
if (entry->blob())
formData->append(name, entry->blob(), entry->filename());
else
formData->append(name, formData->decode(entry->value()));
}
}
formData->append(idName(), id());
formData->append(passwordName(), password());
RefPtr<EncodedFormData> encodedData = formData->encodeMultiPartFormData();
contentType = AtomicString("multipart/form-data; boundary=") +
encodedData->boundary().data();
return encodedData.release();
}
示例13: arrayFromFormData
CFArrayRef arrayFromFormData(const FormData& d)
{
size_t size = d.elements().size();
CFMutableArrayRef a = CFArrayCreateMutable(0, d.elements().size(), &kCFTypeArrayCallBacks);
for (size_t i = 0; i < size; ++i) {
const FormDataElement& e = d.elements()[i];
if (e.m_type == FormDataElement::data) {
CFDataRef data = CFDataCreate(0, (const UInt8*)e.m_data.data(), e.m_data.size());
CFArrayAppendValue(a, data);
CFRelease(data);
} else {
ASSERT(e.m_type == FormDataElement::encodedFile);
CFStringRef filename = e.m_filename.createCFString();
CFArrayAppendValue(a, filename);
CFRelease(filename);
}
}
return a;
}
示例14: appendToFormData
void HTMLObjectElement::appendToFormData(FormData& formData)
{
if (name().isEmpty())
return;
Widget* widget = pluginWidget();
if (!widget || !widget->isPluginView())
return;
String value;
if (toPluginView(widget)->getFormValue(value))
formData.append(name(), value);
}
示例15: appendToFormData
void HTMLKeygenElement::appendToFormData(FormData& formData) {
// Only RSA is supported at this time.
const AtomicString& keyType = fastGetAttribute(keytypeAttr);
if (!keyType.isNull() && !equalIgnoringCase(keyType, "rsa"))
return;
SecurityOrigin* topOrigin =
document().frame()->tree().top()->securityContext()->getSecurityOrigin();
String value = Platform::current()->signedPublicKeyAndChallengeString(
shadowSelect()->selectedIndex(), fastGetAttribute(challengeAttr),
document().baseURL(), KURL(KURL(), topOrigin->toString()));
if (!value.isNull())
formData.append(name(), value);
}