本文整理汇总了C++中StreamContext::getOptions方法的典型用法代码示例。如果您正苦于以下问题:C++ StreamContext::getOptions方法的具体用法?C++ StreamContext::getOptions怎么用?C++ StreamContext::getOptions使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StreamContext
的用法示例。
在下文中一共展示了StreamContext::getOptions方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: f_stream_context_get_options
Variant f_stream_context_get_options(const Resource& stream_or_context) {
StreamContext* context = get_stream_context(stream_or_context);
if (!context) {
raise_warning("Invalid stream/context parameter");
return false;
}
return context->getOptions();
}
示例2: open
File* HttpStreamWrapper::open(const String& filename, const String& mode,
int options, const Variant& context) {
if (RuntimeOption::ServerHttpSafeMode) {
return nullptr;
}
if (strncmp(filename.data(), "http://", sizeof("http://") - 1) &&
strncmp(filename.data(), "https://", sizeof("https://") - 1)) {
return nullptr;
}
std::unique_ptr<UrlFile> file;
StreamContext *ctx = !context.isResource() ? nullptr :
context.toResource().getTyped<StreamContext>();
Array headers;
String method = s_GET;
String post_data = null_string;
int max_redirs = 20;
int timeout = -1;
bool ignore_errors = false;
if (ctx && !ctx->getOptions().isNull() &&
!ctx->getOptions()[s_http].isNull()) {
Array opts = ctx->getOptions()[s_http].toArray();
if (opts.exists(s_method)) {
method = opts[s_method].toString();
}
if (opts.exists(s_header)) {
Array lines;
if (opts[s_header].isString()) {
lines = StringUtil::Explode(
opts[s_header].toString(), "\r\n").toArray();
} else if (opts[s_header].isArray()) {
lines = opts[s_header];
}
for (ArrayIter it(lines); it; ++it) {
Array parts = StringUtil::Explode(
it.second().toString(), ":").toArray();
headers.set(parts.rvalAt(0), parts.rvalAt(1));
}
}
if (opts.exists(s_user_agent) && !headers.exists(s_User_Agent)) {
headers.set(s_User_Agent, opts[s_user_agent]);
}
if (opts.exists(s_max_redirects)) {
max_redirs = opts[s_max_redirects].toInt64();
}
if (opts.exists(s_timeout)) {
timeout = opts[s_timeout].toInt64();
}
if (opts.exists(s_ignore_errors)) {
ignore_errors = opts[s_ignore_errors].toBoolean();
}
post_data = opts[s_content].toString();
}
if (!headers.exists(s_User_Agent)) {
auto default_user_agent = ThreadInfo::s_threadInfo.getNoCheck()
->m_reqInjectionData.getUserAgent();
if (!default_user_agent.empty()) {
headers.set(s_User_Agent, default_user_agent);
}
}
file = std::unique_ptr<UrlFile>(newres<UrlFile>(method.data(), headers,
post_data, max_redirs,
timeout, ignore_errors));
bool ret = file->open(filename, mode);
if (!ret) {
raise_warning("Failed to open %s (%s)", filename.data(),
file->getLastError().c_str());
return nullptr;
}
return file.release();
}
示例3: open
File* HttpStreamWrapper::open(const String& filename, const String& mode,
int options, CVarRef context) {
if (RuntimeOption::ServerHttpSafeMode) {
return nullptr;
}
if (strncmp(filename.data(), "http://", sizeof("http://") - 1) &&
strncmp(filename.data(), "https://", sizeof("https://") - 1)) {
return nullptr;
}
std::unique_ptr<UrlFile> file;
StreamContext *ctx = !context.isResource() ? nullptr :
context.toResource().getTyped<StreamContext>();
if (!ctx || ctx->getOptions().isNull() ||
ctx->getOptions()[s_http].isNull()) {
file = std::unique_ptr<UrlFile>(NEWOBJ(UrlFile)());
} else {
Array opts = ctx->getOptions()[s_http].toArray();
String method = s_GET;
if (opts.exists(s_method)) {
method = opts[s_method].toString();
}
Array headers;
if (opts.exists(s_header)) {
Array lines;
if (opts[s_header].isString()) {
lines = StringUtil::Explode(
opts[s_header].toString(), "\r\n").toArray();
} else if (opts[s_header].isArray()) {
lines = opts[s_header];
}
for (ArrayIter it(lines); it; ++it) {
Array parts = StringUtil::Explode(
it.second().toString(), ": ").toArray();
headers.set(parts.rvalAt(0), parts.rvalAt(1));
}
}
if (opts.exists(s_user_agent) && !headers.exists(s_User_Agent)) {
headers.set(s_User_Agent, opts[s_user_agent]);
}
int max_redirs = 20;
if (opts.exists(s_max_redirects)) {
max_redirs = opts[s_max_redirects].toInt64();
}
int timeout = -1;
if (opts.exists(s_timeout)) {
timeout = opts[s_timeout].toInt64();
}
file = std::unique_ptr<UrlFile>(NEWOBJ(UrlFile)(method.data(), headers,
opts[s_content].toString(),
max_redirs, timeout));
}
bool ret = file->open(filename, mode);
if (!ret) {
raise_warning("Failed to open %s (%s)", filename.data(),
file->getLastError().c_str());
return nullptr;
}
return file.release();
}