qt - 尝试上传图像时,Twitter api 错误“代码 32 无法验证您”
问题描述
我正在尝试从我的应用程序将照片上传到 Twitter,并且我正在使用https://github.com/pipacs/o2库进行 OAuth。
以下是我正在使用的代码:
QFile file(imgPath);
if (!file.open(QIODevice::ReadOnly))
{
return false;
}
QByteArray m_buffer = file.readAll();
O1Requestor* requestor = new O1Requestor(d->netMngr, d->o1Twitter, this);
QList<O0RequestParameter> reqParams = QList<O0RequestParameter>();
reqParams << O0RequestParameter(QByteArray("media"), m_buffer);
reqParams << O0RequestParameter(QByteArray("media_type"), QByteArray("image/jpeg"));
QByteArray postData = O1::createQueryParameters(reqParams);
QUrl url = QUrl("https://upload.twitter.com/1.1/media/upload.json");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
QNetworkReply *reply = requestor->post(request, reqParams, postData);
结果如下:
错误:“主机需要身份验证”内容:“{“错误”:[{“代码”:32,“消息”:“无法验证您。”}]}“
我尝试做一些简单的事情,比如发布一条推文说 Hello 以使用 statuses/update 端点测试身份验证,并且它没有错误地工作。如果需要,以下是代码:
QUrl url2 = QUrl("https://api.twitter.com/1.1/statuses/update.json);
reqParams = QList<O0RequestParameter>();
reqParams << O0RequestParameter(QByteArray("status"), "Hello");
postData = O1::createQueryParameters(reqParams);
request.setUrl(url2);
request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
QNetworkReply *reply = requestor->post(request, reqParams, postData);
你能帮我解决这个问题吗?谢谢
解决方案
与此答案类似,您需要确保将图像内容m_buffer
作为 base-64 编码字符串发送。否则,Twitter API 将返回错误 32。
推荐阅读
- r - 如何连接网络图中的两个节点并打印出路径?
- javascript - Chrome Zoom 不会更改 getBoundingClientRect 值
- python - 使用组合字符串和列表作为列标题构建新的 Pandas 数据框
- javascript - JavaScript 事件委托在 Window 上是否重要?
- vba - ExportAsFixedFormat 上的编译错误 - 使用 PpFixedFormatIntent 参数(将 PowerPoint 保存为 PDF)
- python - 模拟移动浏览器
- python-3.x - 如何爬取一些数据+链接的列表并获取这些链接数据
- qt - QLineEdit 应该接受范围为 [0 - FFFFF] 的十六进制值
- laravel - 使用查询生成器获取类别和 Sub_subcategories 列表
- rest - 根据codeigniter中的id将多行数据分组