質問編集履歴
3
コードの間違いを修正した。
test
CHANGED
File without changes
|
test
CHANGED
@@ -370,9 +370,9 @@
|
|
370
370
|
|
371
371
|
val expected = "長いので略"
|
372
372
|
|
373
|
-
val actual = "長いので略
|
373
|
+
val actual = "長いので略"
|
374
|
-
|
374
|
+
|
375
|
-
val lastIndex = min(d
|
375
|
+
val lastIndex = min(expected.length, actual.length)
|
376
376
|
|
377
377
|
|
378
378
|
|
2
追記をもう一つ追加した。
test
CHANGED
File without changes
|
test
CHANGED
@@ -405,3 +405,55 @@
|
|
405
405
|
この情報をもとにもう一度実装し直してみます。
|
406
406
|
|
407
407
|
ページに大文字小文字についての言及があったのかもしれないので。
|
408
|
+
|
409
|
+
|
410
|
+
|
411
|
+
## 追記2
|
412
|
+
|
413
|
+
`Hello Ladies + Gentlemen, a signed OAuth request!`をパーセントエンコードすると`Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21`になると思いますが、
|
414
|
+
|
415
|
+
|
416
|
+
|
417
|
+
[Creating a signature — Twitter Developers](https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html)
|
418
|
+
|
419
|
+
|
420
|
+
|
421
|
+
では`Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21`として扱われているように思えます。
|
422
|
+
|
423
|
+
`+`が`%2B`に変換されるはずですが、このページでは`%2b`として扱われています。
|
424
|
+
|
425
|
+
また、`,`も`%2C`に変換されるはずですが、`%2c`として扱われています。
|
426
|
+
|
427
|
+
|
428
|
+
|
429
|
+
しかし、[Creating a signature — Twitter Developers](https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html) で実際のシグネチャを求めていく解説の中では、正しい値である大文字のBと大文字のCの方として扱っているため、実行結果が異なるといったことにつながったのではないかと思います。
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
試しに、入力を修正して私のプログラムを実行してみました。
|
434
|
+
|
435
|
+
`"status" to "Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21"` を
|
436
|
+
|
437
|
+
`"status" to "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21"` に直して実行すると、
|
438
|
+
|
439
|
+
|
440
|
+
|
441
|
+
```Text
|
442
|
+
|
443
|
+
key: kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE
|
444
|
+
|
445
|
+
data: POST&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521
|
446
|
+
|
447
|
+
signature: hCtSmYh+iHYCEqBWrE7C7hYmtUk=
|
448
|
+
|
449
|
+
正しい結果が得られました。
|
450
|
+
|
451
|
+
```
|
452
|
+
|
453
|
+
|
454
|
+
|
455
|
+
というように正しく動作したように思えます。
|
456
|
+
|
457
|
+
|
458
|
+
|
459
|
+
この「解説ページが間違っている」という推測が正しいという裏付けが取れませんので、何か情報を持ってらっしゃる方は教えてください。
|
1
追記を追加した。
test
CHANGED
File without changes
|
test
CHANGED
@@ -355,3 +355,53 @@
|
|
355
355
|
}
|
356
356
|
|
357
357
|
```
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
# 追記
|
362
|
+
|
363
|
+
次のコードで検証して見ると、大文字小文字が違っていました。
|
364
|
+
|
365
|
+
公式ページの値と比較する際にChromeの検索機能 (大文字小文字を区別しない) で比較していたので気づきませんでした。
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
```Kotlin
|
370
|
+
|
371
|
+
val expected = "長いので略"
|
372
|
+
|
373
|
+
val actual = "長いので略
|
374
|
+
|
375
|
+
val lastIndex = min(data.length, signatureBaseString.length)
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
for (i in (0..lastIndex)) {
|
380
|
+
|
381
|
+
val actualChar = actual[i]
|
382
|
+
|
383
|
+
val expectedChar = expected[i]
|
384
|
+
|
385
|
+
if (actualChar != expectedChar)
|
386
|
+
|
387
|
+
println("$i: $actualChar, $expectedChar")
|
388
|
+
|
389
|
+
}
|
390
|
+
|
391
|
+
```
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
```Text
|
396
|
+
|
397
|
+
388: b, B
|
398
|
+
|
399
|
+
407: c, C
|
400
|
+
|
401
|
+
```
|
402
|
+
|
403
|
+
|
404
|
+
|
405
|
+
この情報をもとにもう一度実装し直してみます。
|
406
|
+
|
407
|
+
ページに大文字小文字についての言及があったのかもしれないので。
|